diff options
author | Alon Zakai <alonzakai@gmail.com> | 2014-01-07 18:07:13 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2014-01-07 18:07:13 -0800 |
commit | cf4394f3d82b5a7b3de9046f259f1f32399808ce (patch) | |
tree | e53ade146112e52f048555740ded436cb24a62b5 /lib/Target/JSBackend | |
parent | 6c302d79abf0fa9a7819ed5a31c49d02be8dc8a4 (diff) |
vector ops call handlers
Diffstat (limited to 'lib/Target/JSBackend')
-rw-r--r-- | lib/Target/JSBackend/CallHandlers.h | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/lib/Target/JSBackend/CallHandlers.h b/lib/Target/JSBackend/CallHandlers.h index 08111cc435..f48928fb20 100644 --- a/lib/Target/JSBackend/CallHandlers.h +++ b/lib/Target/JSBackend/CallHandlers.h @@ -165,6 +165,63 @@ DEF_CALL_HANDLER(llvm_cttz_i32, { return CH___default__(CI, "_llvm_cttz_i32", 1); }) +// vector ops +DEF_CALL_HANDLER(emscripten_float32x4_signmask, { + return CH___default__(CI, "SIMD.float32x4.bitsToInt32x4") + ".signMask"; +}) +DEF_CALL_HANDLER(emscripten_float32x4_min, { + return CH___default__(CI, "SIMD.float32x4.min"); +}) +DEF_CALL_HANDLER(emscripten_float32x4_max, { + return CH___default__(CI, "SIMD.float32x4.max"); +}) +DEF_CALL_HANDLER(emscripten_float32x4_sqrt, { + return CH___default__(CI, "SIMD.float32x4.sqrt"); +}) +DEF_CALL_HANDLER(emscripten_float32x4_lessThan, { + return CH___default__(CI, "SIMD.float32x4.lessThan"); +}) +DEF_CALL_HANDLER(emscripten_float32x4_lessThanOrEqual, { + return CH___default__(CI, "SIMD.float32x4.lessThanOrEqual"); +}) +DEF_CALL_HANDLER(emscripten_float32x4_equal, { + return CH___default__(CI, "SIMD.float32x4.equal"); +}) +DEF_CALL_HANDLER(emscripten_float32x4_greaterThanOrEqual, { + return CH___default__(CI, "SIMD.float32x4.greaterThanOrEqual"); +}) +DEF_CALL_HANDLER(emscripten_float32x4_greaterThan, { + return CH___default__(CI, "SIMD.float32x4.greaterThan"); +}) +DEF_CALL_HANDLER(emscripten_float32x4_and, { + return getAssign(getJSName(CI), CI->getType()) + "SIMD.int32x4.bitsToFloat32x4(SIMD.int32x4.and(SIMD.float32x4.bitsToInt32x4(" + + getValueAsStr(CI->getOperand(0)) + "),SIMD.float32x4.bitsToInt32x4(" + getValueAsStr(CI->getOperand(1)) + ")))"; +}) +DEF_CALL_HANDLER(emscripten_float32x4_andNot, { + return getAssign(getJSName(CI), CI->getType()) + "SIMD.int32x4.bitsToFloat32x4(SIMD.int32x4.and(SIMD.int32x4.not(SIMD.float32x4.bitsToInt32x4(" + + getValueAsStr(CI->getOperand(0)) + ")),SIMD.float32x4.bitsToInt32x4(" + getValueAsStr(CI->getOperand(1)) + ")))"; +}) +DEF_CALL_HANDLER(emscripten_float32x4_or, { + return getAssign(getJSName(CI), CI->getType()) + "SIMD.int32x4.bitsToFloat32x4(SIMD.int32x4.or(SIMD.float32x4.bitsToInt32x4(" + + getValueAsStr(CI->getOperand(0)) + "),SIMD.float32x4.bitsToInt32x4(" + getValueAsStr(CI->getOperand(1)) + ")))"; +}) +DEF_CALL_HANDLER(emscripten_float32x4_xor, { + return getAssign(getJSName(CI), CI->getType()) + "SIMD.int32x4.bitsToFloat32x4(SIMD.int32x4.xor(SIMD.float32x4.bitsToInt32x4(" + + getValueAsStr(CI->getOperand(0)) + "),SIMD.float32x4.bitsToInt32x4(" + getValueAsStr(CI->getOperand(1)) + ")))"; +}) +DEF_CALL_HANDLER(emscripten_int32x4_bitsToFloat32x4, { + return CH___default__(CI, "SIMD.int32x4.bitsToFloat32x4"); +}) +DEF_CALL_HANDLER(emscripten_int32x4_toFloat32x4, { + return CH___default__(CI, "SIMD.int32x4.toFloat32x4"); +}) +DEF_CALL_HANDLER(emscripten_float32x4_bitsToInt32x4, { + return CH___default__(CI, "SIMD.float32x4.bitsToInt32x4"); +}) +DEF_CALL_HANDLER(emscripten_float32x4_toInt32x4, { + return CH___default__(CI, "SIMD.float32x4.toInt32x4"); +}) + #define DEF_REDIRECT_HANDLER(name, to) \ DEF_CALL_HANDLER(name, { \ /* FIXME: do not redirect if this is implemented and not just a declare! */ \ @@ -476,6 +533,23 @@ void setupCallHandlers() { SETUP_CALL_HANDLER(bitshift64Shl); SETUP_CALL_HANDLER(llvm_ctlz_i32); SETUP_CALL_HANDLER(llvm_cttz_i32); + SETUP_CALL_HANDLER(emscripten_float32x4_signmask); + SETUP_CALL_HANDLER(emscripten_float32x4_min); + SETUP_CALL_HANDLER(emscripten_float32x4_max); + SETUP_CALL_HANDLER(emscripten_float32x4_sqrt); + SETUP_CALL_HANDLER(emscripten_float32x4_lessThan); + SETUP_CALL_HANDLER(emscripten_float32x4_lessThanOrEqual); + SETUP_CALL_HANDLER(emscripten_float32x4_equal); + SETUP_CALL_HANDLER(emscripten_float32x4_greaterThanOrEqual); + SETUP_CALL_HANDLER(emscripten_float32x4_greaterThan); + SETUP_CALL_HANDLER(emscripten_float32x4_and); + SETUP_CALL_HANDLER(emscripten_float32x4_andNot); + SETUP_CALL_HANDLER(emscripten_float32x4_or); + SETUP_CALL_HANDLER(emscripten_float32x4_xor); + SETUP_CALL_HANDLER(emscripten_int32x4_bitsToFloat32x4); + SETUP_CALL_HANDLER(emscripten_int32x4_toFloat32x4); + SETUP_CALL_HANDLER(emscripten_float32x4_bitsToInt32x4); + SETUP_CALL_HANDLER(emscripten_float32x4_toInt32x4); SETUP_CALL_HANDLER(__01readdir64_); SETUP_CALL_HANDLER(__xpg_basename); |