JavascriptSimdUint32x4.cpp 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  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. JavascriptSIMDUint32x4::JavascriptSIMDUint32x4(StaticType *type) : RecyclableObject(type)
  9. {
  10. Assert(type->GetTypeId() == TypeIds_SIMDUint32x4);
  11. }
  12. JavascriptSIMDUint32x4::JavascriptSIMDUint32x4(SIMDValue *val, StaticType *type) : RecyclableObject(type), value(*val)
  13. {
  14. Assert(type->GetTypeId() == TypeIds_SIMDUint32x4);
  15. }
  16. JavascriptSIMDUint32x4* JavascriptSIMDUint32x4::AllocUninitialized(ScriptContext* requestContext)
  17. {
  18. return (JavascriptSIMDUint32x4 *)AllocatorNew(Recycler, requestContext->GetRecycler(), JavascriptSIMDUint32x4, requestContext->GetLibrary()->GetSIMDUInt32x4TypeStatic());
  19. }
  20. JavascriptSIMDUint32x4* JavascriptSIMDUint32x4::New(SIMDValue *val, ScriptContext* requestContext)
  21. {
  22. return (JavascriptSIMDUint32x4 *)AllocatorNew(Recycler, requestContext->GetRecycler(), JavascriptSIMDUint32x4, val, requestContext->GetLibrary()->GetSIMDUInt32x4TypeStatic());
  23. }
  24. bool JavascriptSIMDUint32x4::Is(Var instance)
  25. {
  26. return JavascriptOperators::GetTypeId(instance) == TypeIds_SIMDUint32x4;
  27. }
  28. JavascriptSIMDUint32x4* JavascriptSIMDUint32x4::FromVar(Var aValue)
  29. {
  30. Assert(aValue);
  31. AssertMsg(Is(aValue), "Ensure var is actually a 'JavascriptSIMDUint32x4'");
  32. return reinterpret_cast<JavascriptSIMDUint32x4 *>(aValue);
  33. }
  34. RecyclableObject * JavascriptSIMDUint32x4::CloneToScriptContext(ScriptContext* requestContext)
  35. {
  36. return JavascriptSIMDUint32x4::New(&value, requestContext);
  37. }
  38. BOOL JavascriptSIMDUint32x4::GetProperty(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext)
  39. {
  40. return GetPropertyBuiltIns(propertyId, value, requestContext);
  41. }
  42. BOOL JavascriptSIMDUint32x4::GetProperty(Var originalInstance, JavascriptString* propertyNameString, Var* value, PropertyValueInfo* info, ScriptContext* requestContext)
  43. {
  44. PropertyRecord const* propertyRecord;
  45. this->GetScriptContext()->FindPropertyRecord(propertyNameString, &propertyRecord);
  46. if (propertyRecord != nullptr && GetPropertyBuiltIns(propertyRecord->GetPropertyId(), value, requestContext))
  47. {
  48. return true;
  49. }
  50. return false;
  51. }
  52. BOOL JavascriptSIMDUint32x4::GetPropertyReference(Var originalInstance, PropertyId propertyId, Var* value, PropertyValueInfo* info, ScriptContext* requestContext)
  53. {
  54. return JavascriptSIMDUint32x4::GetProperty(originalInstance, propertyId, value, info, requestContext);
  55. }
  56. bool JavascriptSIMDUint32x4::GetPropertyBuiltIns(PropertyId propertyId, Var* value, ScriptContext* requestContext)
  57. {
  58. if (propertyId == PropertyIds::toString)
  59. {
  60. *value = requestContext->GetLibrary()->GetSIMDUint32x4ToStringFunction();
  61. return true;
  62. }
  63. return false;
  64. }
  65. Var JavascriptSIMDUint32x4::EntryToString(RecyclableObject* function, CallInfo callInfo, ...)
  66. {
  67. PROBE_STACK(function->GetScriptContext(), Js::Constants::MinStackDefault);
  68. ARGUMENTS(args, callInfo);
  69. ScriptContext* scriptContext = function->GetScriptContext();
  70. AssertMsg(args.Info.Count > 0, "Should always have implicit 'this'");
  71. Assert(!(callInfo.Flags & CallFlags_New));
  72. if (args.Info.Count == 0 || JavascriptOperators::GetTypeId(args[0]) != TypeIds_SIMDUint32x4)
  73. {
  74. JavascriptError::ThrowTypeError(scriptContext, JSERR_This_NeedSimd, L"SIMDUInt32x4.toString");
  75. }
  76. JavascriptSIMDUint32x4* instance = JavascriptSIMDUint32x4::FromVar(args[0]);
  77. Assert(instance);
  78. wchar_t stringBuffer[SIMD_STRING_BUFFER_MAX];
  79. SIMDValue value = instance->GetValue();
  80. JavascriptSIMDUint32x4::ToStringBuffer(value, stringBuffer, SIMD_STRING_BUFFER_MAX);
  81. JavascriptString* string = JavascriptString::NewCopySzFromArena(stringBuffer, scriptContext, scriptContext->GeneralAllocator());
  82. return string;
  83. }
  84. Var JavascriptSIMDUint32x4::Copy(ScriptContext* requestContext)
  85. {
  86. return JavascriptSIMDUint32x4::New(&this->value, requestContext);
  87. }
  88. }