Var SIMDUint8x16Lib::EntrySelect(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'"); Assert(!(callInfo.Flags & CallFlags_New)); if (args.Info.Count >= 4 && JavascriptSIMDBool8x16::Is(args[1]) && JavascriptSIMDUint8x16::Is(args[2]) && JavascriptSIMDUint8x16::Is(args[3])) { JavascriptSIMDBool8x16 *m = JavascriptSIMDBool8x16::FromVar(args[1]); JavascriptSIMDUint8x16 *t = JavascriptSIMDUint8x16::FromVar(args[2]); JavascriptSIMDUint8x16 *f = JavascriptSIMDUint8x16::FromVar(args[3]); Assert(m && t && f); SIMDValue result, maskValue, trueValue, falseValue; maskValue = m->GetValue(); trueValue = t->GetValue(); falseValue = f->GetValue(); result = SIMDInt32x4Operation::OpSelect(maskValue, trueValue, falseValue); return JavascriptSIMDUint8x16::New(&result, scriptContext); } JavascriptError::ThrowTypeError(scriptContext, JSERR_SimdUint8x16TypeMismatch, _u("select")); }
Var SIMDBool8x16Lib::EntryXor(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'"); Assert(!(callInfo.Flags & CallFlags_New)); // If any of the args are missing, then it is Undefined type which causes TypeError exception. // strict type on both operands if (args.Info.Count >= 3 && JavascriptSIMDBool8x16::Is(args[1]) && JavascriptSIMDBool8x16::Is(args[2])) { JavascriptSIMDBool8x16 *a = JavascriptSIMDBool8x16::FromVar(args[1]); JavascriptSIMDBool8x16 *b = JavascriptSIMDBool8x16::FromVar(args[2]); Assert(a && b); SIMDValue result, aValue, bValue; aValue = a->GetValue(); bValue = b->GetValue(); result = SIMDInt32x4Operation::OpXor(aValue, bValue); return JavascriptSIMDBool8x16::New(&result, scriptContext); } JavascriptError::ThrowTypeError(scriptContext, JSERR_SimdBool8x16TypeMismatch, _u("xor")); }
Var JavascriptSIMDBool8x16::EntryToString(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'"); Assert(!(callInfo.Flags & CallFlags_New)); if (args.Info.Count == 0 || !JavascriptSIMDBool8x16::Is(args[0])) { JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedSimd, L"SIMDBool8x16.toString"); } JavascriptSIMDBool8x16 *instance = JavascriptSIMDBool8x16::FromVar(args[0]); Assert(instance); wchar_t stringBuffer[1024]; SIMDValue value = instance->GetValue(); swprintf_s(stringBuffer, 1024, L"SIMD.Bool8x16(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)", \ value.i8[0] ? L"true" : L"false", value.i8[1] ? L"true" : L"false", value.i8[2] ? L"true" : L"false", value.i8[3] ? L"true" : L"false",\ value.i8[4] ? L"true" : L"false", value.i8[5] ? L"true" : L"false", value.i8[6] ? L"true" : L"false", value.i8[7] ? L"true" : L"false",\ value.i8[8] ? L"true" : L"false", value.i8[9] ? L"true" : L"false", value.i8[10] ? L"true" : L"false", value.i8[11] ? L"true" : L"false",\ value.i8[12] ? L"true" : L"false", value.i8[13] ? L"true" : L"false", value.i8[14] ? L"true" : L"false", value.i8[15] ? L"true" : L"false" ); JavascriptString* string = JavascriptString::NewCopySzFromArena(stringBuffer, scriptContext, scriptContext->GeneralAllocator()); return string; }
Var SIMDBool8x16Lib::EntryNot(RecyclableObject* function, CallInfo callInfo, ...) { PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault); ARGUMENTS(args, callInfo); ScriptContext* scriptContext = function->GetScriptContext(); AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'"); Assert(!(callInfo.Flags & CallFlags_New)); if (args.Info.Count >= 2 && JavascriptSIMDBool8x16::Is(args[1])) { JavascriptSIMDBool8x16 *a = JavascriptSIMDBool8x16::FromVar(args[1]); Assert(a); SIMDValue result = SIMDInt32x4Operation::OpNot(a->GetValue()); return JavascriptSIMDBool8x16::New(&result, scriptContext); } JavascriptError::ThrowTypeError(scriptContext, JSERR_SimdBool8x16TypeMismatch, _u("not")); }