JavascriptSimdUint8x16.cpp 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. //-------------------------------------------------------------------------------------------------------
  2. // Copyright (C) Microsoft. All rights reserved.
  3. // Licensed under the MIT license. See LICENSE.txt file in the project root for full license information.
  4. //-------------------------------------------------------------------------------------------------------
  5. #include "RuntimeLibraryPch.h"
  6. namespace Js
  7. {
  8. JavascriptSIMDUint8x16::JavascriptSIMDUint8x16(SIMDValue *val, StaticType *type) : RecyclableObject(type), value(*val)
  9. {
  10. Assert(type->GetTypeId() == TypeIds_SIMDUint8x16);
  11. }
  12. JavascriptSIMDUint8x16* JavascriptSIMDUint8x16::New(SIMDValue *val, ScriptContext* requestContext)
  13. {
  14. return (JavascriptSIMDUint8x16 *)AllocatorNew(Recycler, requestContext->GetRecycler(), JavascriptSIMDUint8x16, val, requestContext->GetLibrary()->GetSIMDUint8x16TypeStatic());
  15. }
  16. bool JavascriptSIMDUint8x16::Is(Var instance)
  17. {
  18. return JavascriptOperators::GetTypeId(instance) == TypeIds_SIMDUint8x16;
  19. }
  20. JavascriptSIMDUint8x16* JavascriptSIMDUint8x16::FromVar(Var aValue)
  21. {
  22. Assert(aValue);
  23. AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptSIMDUint8x16'");
  24. return reinterpret_cast<JavascriptSIMDUint8x16 *>(aValue);
  25. }
  26. RecyclableObject * JavascriptSIMDUint8x16::CloneToScriptContext(ScriptContext* requestContext)
  27. {
  28. return JavascriptSIMDUint8x16::New(&value, requestContext);
  29. }
  30. BOOL JavascriptSIMDUint8x16::GetProperty(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext)
  31. {
  32. return GetPropertyBuiltIns(propertyId, value, requestContext);
  33. }
  34. BOOL JavascriptSIMDUint8x16::GetProperty(Var originalInstance, JavascriptString* propertyNameString, Var* value, PropertyValueInfo* info, ScriptContext* requestContext)
  35. {
  36. PropertyRecord const* propertyRecord;
  37. this->GetScriptContext()->FindPropertyRecord(propertyNameString, &propertyRecord);
  38. if (propertyRecord != nullptr && GetPropertyBuiltIns(propertyRecord->GetPropertyId(), value, requestContext))
  39. {
  40. return true;
  41. }
  42. return false;
  43. }
  44. BOOL JavascriptSIMDUint8x16::GetPropertyReference(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext)
  45. {
  46. return JavascriptSIMDUint8x16::GetProperty(originalInstance, propertyId, value, info, requestContext);
  47. }
  48. bool JavascriptSIMDUint8x16::GetPropertyBuiltIns(PropertyId propertyId, Var* value, ScriptContext* requestContext)
  49. {
  50. if (propertyId == PropertyIds::toString)
  51. {
  52. *value = requestContext->GetLibrary()->GetSIMDUint8x16ToStringFunction();
  53. return true;
  54. }
  55. return false;
  56. }
  57. Var JavascriptSIMDUint8x16::EntryToString(RecyclableObject* function, CallInfo callInfo, ...)
  58. {
  59. PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault);
  60. ARGUMENTS(args, callInfo);
  61. ScriptContext* scriptContext = function->GetScriptContext();
  62. AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'");
  63. Assert(!(callInfo.Flags & CallFlags_New));
  64. if (args.Info.Count == 0 || JavascriptOperators::GetTypeId(args[0]) != TypeIds_SIMDUint8x16)
  65. {
  66. JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedSimd, L"SIMDUint8x16.toString");
  67. }
  68. JavascriptSIMDUint8x16* instance = JavascriptSIMDUint8x16::FromVar(args[0]);
  69. Assert(instance);
  70. wchar_t stringBuffer[SIMD_STRING_BUFFER_MAX];
  71. SIMDValue value = instance->GetValue();
  72. JavascriptSIMDUint8x16::ToStringBuffer(value, stringBuffer, SIMD_STRING_BUFFER_MAX);
  73. JavascriptString* string = JavascriptString::NewCopySzFromArena(stringBuffer, scriptContext, scriptContext->GeneralAllocator());
  74. return string;
  75. }
  76. Var JavascriptSIMDUint8x16::Copy(ScriptContext* requestContext)
  77. {
  78. return JavascriptSIMDUint8x16::New(&this->value, requestContext);
  79. }
  80. }