Commit 813d503b by Logan Chien

Wrap call arguments with ARGS macro

Change-Id: I239c906851412a667d2ab241eb20d8045baffb8f Reviewed-on: https://swiftshader-review.googlesource.com/20470Tested-by: 's avatarLogan Chien <loganchien@google.com> Reviewed-by: 's avatarNicolas Capens <nicolascapens@google.com>
parent 191b305d
...@@ -43,6 +43,8 @@ ...@@ -43,6 +43,8 @@
#include <xmmintrin.h> #include <xmmintrin.h>
#endif #endif
#define ARGS(...) __VA_ARGS__
#if defined(__x86_64__) && defined(_WIN32) #if defined(__x86_64__) && defined(_WIN32)
extern "C" void X86CompilationCallback() extern "C" void X86CompilationCallback()
{ {
...@@ -6003,14 +6005,14 @@ namespace sw ...@@ -6003,14 +6005,14 @@ namespace sw
Float4 vector; Float4 vector;
vector.x = val; vector.x = val;
return RValue<Int>(V(::builder->CreateCall(cvtss2si, V(RValue<Float4>(vector).value)))); return RValue<Int>(V(::builder->CreateCall(cvtss2si, ARGS(V(RValue<Float4>(vector).value)))));
} }
RValue<Int4> cvtps2dq(RValue<Float4> val) RValue<Int4> cvtps2dq(RValue<Float4> val)
{ {
llvm::Function *cvtps2dq = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_cvtps2dq); llvm::Function *cvtps2dq = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_cvtps2dq);
return RValue<Int4>(V(::builder->CreateCall(cvtps2dq, V(val.value)))); return RValue<Int4>(V(::builder->CreateCall(cvtps2dq, ARGS(V(val.value)))));
} }
RValue<Float> rcpss(RValue<Float> val) RValue<Float> rcpss(RValue<Float> val)
...@@ -6019,7 +6021,7 @@ namespace sw ...@@ -6019,7 +6021,7 @@ namespace sw
Value *vector = Nucleus::createInsertElement(V(llvm::UndefValue::get(T(Float4::getType()))), val.value, 0); Value *vector = Nucleus::createInsertElement(V(llvm::UndefValue::get(T(Float4::getType()))), val.value, 0);
return RValue<Float>(Nucleus::createExtractElement(V(::builder->CreateCall(rcpss, V(vector))), Float::getType(), 0)); return RValue<Float>(Nucleus::createExtractElement(V(::builder->CreateCall(rcpss, ARGS(V(vector)))), Float::getType(), 0));
} }
RValue<Float> sqrtss(RValue<Float> val) RValue<Float> sqrtss(RValue<Float> val)
...@@ -6028,7 +6030,7 @@ namespace sw ...@@ -6028,7 +6030,7 @@ namespace sw
Value *vector = Nucleus::createInsertElement(V(llvm::UndefValue::get(T(Float4::getType()))), val.value, 0); Value *vector = Nucleus::createInsertElement(V(llvm::UndefValue::get(T(Float4::getType()))), val.value, 0);
return RValue<Float>(Nucleus::createExtractElement(V(::builder->CreateCall(sqrtss, V(vector))), Float::getType(), 0)); return RValue<Float>(Nucleus::createExtractElement(V(::builder->CreateCall(sqrtss, ARGS(V(vector)))), Float::getType(), 0));
} }
RValue<Float> rsqrtss(RValue<Float> val) RValue<Float> rsqrtss(RValue<Float> val)
...@@ -6037,42 +6039,42 @@ namespace sw ...@@ -6037,42 +6039,42 @@ namespace sw
Value *vector = Nucleus::createInsertElement(V(llvm::UndefValue::get(T(Float4::getType()))), val.value, 0); Value *vector = Nucleus::createInsertElement(V(llvm::UndefValue::get(T(Float4::getType()))), val.value, 0);
return RValue<Float>(Nucleus::createExtractElement(V(::builder->CreateCall(rsqrtss, V(vector))), Float::getType(), 0)); return RValue<Float>(Nucleus::createExtractElement(V(::builder->CreateCall(rsqrtss, ARGS(V(vector)))), Float::getType(), 0));
} }
RValue<Float4> rcpps(RValue<Float4> val) RValue<Float4> rcpps(RValue<Float4> val)
{ {
llvm::Function *rcpps = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse_rcp_ps); llvm::Function *rcpps = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse_rcp_ps);
return RValue<Float4>(V(::builder->CreateCall(rcpps, V(val.value)))); return RValue<Float4>(V(::builder->CreateCall(rcpps, ARGS(V(val.value)))));
} }
RValue<Float4> sqrtps(RValue<Float4> val) RValue<Float4> sqrtps(RValue<Float4> val)
{ {
llvm::Function *sqrtps = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse_sqrt_ps); llvm::Function *sqrtps = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse_sqrt_ps);
return RValue<Float4>(V(::builder->CreateCall(sqrtps, V(val.value)))); return RValue<Float4>(V(::builder->CreateCall(sqrtps, ARGS(V(val.value)))));
} }
RValue<Float4> rsqrtps(RValue<Float4> val) RValue<Float4> rsqrtps(RValue<Float4> val)
{ {
llvm::Function *rsqrtps = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse_rsqrt_ps); llvm::Function *rsqrtps = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse_rsqrt_ps);
return RValue<Float4>(V(::builder->CreateCall(rsqrtps, V(val.value)))); return RValue<Float4>(V(::builder->CreateCall(rsqrtps, ARGS(V(val.value)))));
} }
RValue<Float4> maxps(RValue<Float4> x, RValue<Float4> y) RValue<Float4> maxps(RValue<Float4> x, RValue<Float4> y)
{ {
llvm::Function *maxps = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse_max_ps); llvm::Function *maxps = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse_max_ps);
return RValue<Float4>(V(::builder->CreateCall2(maxps, V(x.value), V(y.value)))); return RValue<Float4>(V(::builder->CreateCall2(maxps, ARGS(V(x.value), V(y.value)))));
} }
RValue<Float4> minps(RValue<Float4> x, RValue<Float4> y) RValue<Float4> minps(RValue<Float4> x, RValue<Float4> y)
{ {
llvm::Function *minps = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse_min_ps); llvm::Function *minps = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse_min_ps);
return RValue<Float4>(V(::builder->CreateCall2(minps, V(x.value), V(y.value)))); return RValue<Float4>(V(::builder->CreateCall2(minps, ARGS(V(x.value), V(y.value)))));
} }
RValue<Float> roundss(RValue<Float> val, unsigned char imm) RValue<Float> roundss(RValue<Float> val, unsigned char imm)
...@@ -6082,7 +6084,7 @@ namespace sw ...@@ -6082,7 +6084,7 @@ namespace sw
Value *undef = V(llvm::UndefValue::get(T(Float4::getType()))); Value *undef = V(llvm::UndefValue::get(T(Float4::getType())));
Value *vector = Nucleus::createInsertElement(undef, val.value, 0); Value *vector = Nucleus::createInsertElement(undef, val.value, 0);
return RValue<Float>(Nucleus::createExtractElement(V(::builder->CreateCall3(roundss, V(undef), V(vector), V(Nucleus::createConstantInt(imm)))), Float::getType(), 0)); return RValue<Float>(Nucleus::createExtractElement(V(::builder->CreateCall3(roundss, ARGS(V(undef), V(vector), V(Nucleus::createConstantInt(imm))))), Float::getType(), 0));
} }
RValue<Float> floorss(RValue<Float> val) RValue<Float> floorss(RValue<Float> val)
...@@ -6099,7 +6101,7 @@ namespace sw ...@@ -6099,7 +6101,7 @@ namespace sw
{ {
llvm::Function *roundps = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_round_ps); llvm::Function *roundps = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_round_ps);
return RValue<Float4>(V(::builder->CreateCall2(roundps, V(val.value), V(Nucleus::createConstantInt(imm))))); return RValue<Float4>(V(::builder->CreateCall2(roundps, ARGS(V(val.value), V(Nucleus::createConstantInt(imm))))));
} }
RValue<Float4> floorps(RValue<Float4> val) RValue<Float4> floorps(RValue<Float4> val)
...@@ -6116,140 +6118,140 @@ namespace sw ...@@ -6116,140 +6118,140 @@ namespace sw
{ {
llvm::Function *pabsd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_ssse3_pabs_d_128); llvm::Function *pabsd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_ssse3_pabs_d_128);
return RValue<Int4>(V(::builder->CreateCall(pabsd, V(x.value)))); return RValue<Int4>(V(::builder->CreateCall(pabsd, ARGS(V(x.value)))));
} }
RValue<Short4> paddsw(RValue<Short4> x, RValue<Short4> y) RValue<Short4> paddsw(RValue<Short4> x, RValue<Short4> y)
{ {
llvm::Function *paddsw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_padds_w); llvm::Function *paddsw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_padds_w);
return As<Short4>(V(::builder->CreateCall2(paddsw, V(x.value), V(y.value)))); return As<Short4>(V(::builder->CreateCall2(paddsw, ARGS(V(x.value), V(y.value)))));
} }
RValue<Short4> psubsw(RValue<Short4> x, RValue<Short4> y) RValue<Short4> psubsw(RValue<Short4> x, RValue<Short4> y)
{ {
llvm::Function *psubsw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psubs_w); llvm::Function *psubsw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psubs_w);
return As<Short4>(V(::builder->CreateCall2(psubsw, V(x.value), V(y.value)))); return As<Short4>(V(::builder->CreateCall2(psubsw, ARGS(V(x.value), V(y.value)))));
} }
RValue<UShort4> paddusw(RValue<UShort4> x, RValue<UShort4> y) RValue<UShort4> paddusw(RValue<UShort4> x, RValue<UShort4> y)
{ {
llvm::Function *paddusw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_paddus_w); llvm::Function *paddusw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_paddus_w);
return As<UShort4>(V(::builder->CreateCall2(paddusw, V(x.value), V(y.value)))); return As<UShort4>(V(::builder->CreateCall2(paddusw, ARGS(V(x.value), V(y.value)))));
} }
RValue<UShort4> psubusw(RValue<UShort4> x, RValue<UShort4> y) RValue<UShort4> psubusw(RValue<UShort4> x, RValue<UShort4> y)
{ {
llvm::Function *psubusw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psubus_w); llvm::Function *psubusw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psubus_w);
return As<UShort4>(V(::builder->CreateCall2(psubusw, V(x.value), V(y.value)))); return As<UShort4>(V(::builder->CreateCall2(psubusw, ARGS(V(x.value), V(y.value)))));
} }
RValue<SByte8> paddsb(RValue<SByte8> x, RValue<SByte8> y) RValue<SByte8> paddsb(RValue<SByte8> x, RValue<SByte8> y)
{ {
llvm::Function *paddsb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_padds_b); llvm::Function *paddsb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_padds_b);
return As<SByte8>(V(::builder->CreateCall2(paddsb, V(x.value), V(y.value)))); return As<SByte8>(V(::builder->CreateCall2(paddsb, ARGS(V(x.value), V(y.value)))));
} }
RValue<SByte8> psubsb(RValue<SByte8> x, RValue<SByte8> y) RValue<SByte8> psubsb(RValue<SByte8> x, RValue<SByte8> y)
{ {
llvm::Function *psubsb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psubs_b); llvm::Function *psubsb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psubs_b);
return As<SByte8>(V(::builder->CreateCall2(psubsb, V(x.value), V(y.value)))); return As<SByte8>(V(::builder->CreateCall2(psubsb, ARGS(V(x.value), V(y.value)))));
} }
RValue<Byte8> paddusb(RValue<Byte8> x, RValue<Byte8> y) RValue<Byte8> paddusb(RValue<Byte8> x, RValue<Byte8> y)
{ {
llvm::Function *paddusb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_paddus_b); llvm::Function *paddusb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_paddus_b);
return As<Byte8>(V(::builder->CreateCall2(paddusb, V(x.value), V(y.value)))); return As<Byte8>(V(::builder->CreateCall2(paddusb, ARGS(V(x.value), V(y.value)))));
} }
RValue<Byte8> psubusb(RValue<Byte8> x, RValue<Byte8> y) RValue<Byte8> psubusb(RValue<Byte8> x, RValue<Byte8> y)
{ {
llvm::Function *psubusb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psubus_b); llvm::Function *psubusb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psubus_b);
return As<Byte8>(V(::builder->CreateCall2(psubusb, V(x.value), V(y.value)))); return As<Byte8>(V(::builder->CreateCall2(psubusb, ARGS(V(x.value), V(y.value)))));
} }
RValue<UShort4> pavgw(RValue<UShort4> x, RValue<UShort4> y) RValue<UShort4> pavgw(RValue<UShort4> x, RValue<UShort4> y)
{ {
llvm::Function *pavgw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pavg_w); llvm::Function *pavgw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pavg_w);
return As<UShort4>(V(::builder->CreateCall2(pavgw, V(x.value), V(y.value)))); return As<UShort4>(V(::builder->CreateCall2(pavgw, ARGS(V(x.value), V(y.value)))));
} }
RValue<Short4> pmaxsw(RValue<Short4> x, RValue<Short4> y) RValue<Short4> pmaxsw(RValue<Short4> x, RValue<Short4> y)
{ {
llvm::Function *pmaxsw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmaxs_w); llvm::Function *pmaxsw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmaxs_w);
return As<Short4>(V(::builder->CreateCall2(pmaxsw, V(x.value), V(y.value)))); return As<Short4>(V(::builder->CreateCall2(pmaxsw, ARGS(V(x.value), V(y.value)))));
} }
RValue<Short4> pminsw(RValue<Short4> x, RValue<Short4> y) RValue<Short4> pminsw(RValue<Short4> x, RValue<Short4> y)
{ {
llvm::Function *pminsw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmins_w); llvm::Function *pminsw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmins_w);
return As<Short4>(V(::builder->CreateCall2(pminsw, V(x.value), V(y.value)))); return As<Short4>(V(::builder->CreateCall2(pminsw, ARGS(V(x.value), V(y.value)))));
} }
RValue<Short4> pcmpgtw(RValue<Short4> x, RValue<Short4> y) RValue<Short4> pcmpgtw(RValue<Short4> x, RValue<Short4> y)
{ {
llvm::Function *pcmpgtw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pcmpgt_w); llvm::Function *pcmpgtw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pcmpgt_w);
return As<Short4>(V(::builder->CreateCall2(pcmpgtw, V(x.value), V(y.value)))); return As<Short4>(V(::builder->CreateCall2(pcmpgtw, ARGS(V(x.value), V(y.value)))));
} }
RValue<Short4> pcmpeqw(RValue<Short4> x, RValue<Short4> y) RValue<Short4> pcmpeqw(RValue<Short4> x, RValue<Short4> y)
{ {
llvm::Function *pcmpeqw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pcmpeq_w); llvm::Function *pcmpeqw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pcmpeq_w);
return As<Short4>(V(::builder->CreateCall2(pcmpeqw, V(x.value), V(y.value)))); return As<Short4>(V(::builder->CreateCall2(pcmpeqw, ARGS(V(x.value), V(y.value)))));
} }
RValue<Byte8> pcmpgtb(RValue<SByte8> x, RValue<SByte8> y) RValue<Byte8> pcmpgtb(RValue<SByte8> x, RValue<SByte8> y)
{ {
llvm::Function *pcmpgtb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pcmpgt_b); llvm::Function *pcmpgtb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pcmpgt_b);
return As<Byte8>(V(::builder->CreateCall2(pcmpgtb, V(x.value), V(y.value)))); return As<Byte8>(V(::builder->CreateCall2(pcmpgtb, ARGS(V(x.value), V(y.value)))));
} }
RValue<Byte8> pcmpeqb(RValue<Byte8> x, RValue<Byte8> y) RValue<Byte8> pcmpeqb(RValue<Byte8> x, RValue<Byte8> y)
{ {
llvm::Function *pcmpeqb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pcmpeq_b); llvm::Function *pcmpeqb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pcmpeq_b);
return As<Byte8>(V(::builder->CreateCall2(pcmpeqb, V(x.value), V(y.value)))); return As<Byte8>(V(::builder->CreateCall2(pcmpeqb, ARGS(V(x.value), V(y.value)))));
} }
RValue<Short4> packssdw(RValue<Int2> x, RValue<Int2> y) RValue<Short4> packssdw(RValue<Int2> x, RValue<Int2> y)
{ {
llvm::Function *packssdw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_packssdw_128); llvm::Function *packssdw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_packssdw_128);
return As<Short4>(V(::builder->CreateCall2(packssdw, V(x.value), V(y.value)))); return As<Short4>(V(::builder->CreateCall2(packssdw, ARGS(V(x.value), V(y.value)))));
} }
RValue<Short8> packssdw(RValue<Int4> x, RValue<Int4> y) RValue<Short8> packssdw(RValue<Int4> x, RValue<Int4> y)
{ {
llvm::Function *packssdw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_packssdw_128); llvm::Function *packssdw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_packssdw_128);
return RValue<Short8>(V(::builder->CreateCall2(packssdw, V(x.value), V(y.value)))); return RValue<Short8>(V(::builder->CreateCall2(packssdw, ARGS(V(x.value), V(y.value)))));
} }
RValue<SByte8> packsswb(RValue<Short4> x, RValue<Short4> y) RValue<SByte8> packsswb(RValue<Short4> x, RValue<Short4> y)
{ {
llvm::Function *packsswb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_packsswb_128); llvm::Function *packsswb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_packsswb_128);
return As<SByte8>(V(::builder->CreateCall2(packsswb, V(x.value), V(y.value)))); return As<SByte8>(V(::builder->CreateCall2(packsswb, ARGS(V(x.value), V(y.value)))));
} }
RValue<Byte8> packuswb(RValue<Short4> x, RValue<Short4> y) RValue<Byte8> packuswb(RValue<Short4> x, RValue<Short4> y)
{ {
llvm::Function *packuswb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_packuswb_128); llvm::Function *packuswb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_packuswb_128);
return As<Byte8>(V(::builder->CreateCall2(packuswb, V(x.value), V(y.value)))); return As<Byte8>(V(::builder->CreateCall2(packuswb, ARGS(V(x.value), V(y.value)))));
} }
RValue<UShort8> packusdw(RValue<Int4> x, RValue<Int4> y) RValue<UShort8> packusdw(RValue<Int4> x, RValue<Int4> y)
...@@ -6258,7 +6260,7 @@ namespace sw ...@@ -6258,7 +6260,7 @@ namespace sw
{ {
llvm::Function *packusdw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_packusdw); llvm::Function *packusdw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_packusdw);
return RValue<UShort8>(V(::builder->CreateCall2(packusdw, V(x.value), V(y.value)))); return RValue<UShort8>(V(::builder->CreateCall2(packusdw, ARGS(V(x.value), V(y.value)))));
} }
else else
{ {
...@@ -6273,196 +6275,196 @@ namespace sw ...@@ -6273,196 +6275,196 @@ namespace sw
{ {
llvm::Function *psrlw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psrli_w); llvm::Function *psrlw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psrli_w);
return As<UShort4>(V(::builder->CreateCall2(psrlw, V(x.value), V(Nucleus::createConstantInt(y))))); return As<UShort4>(V(::builder->CreateCall2(psrlw, ARGS(V(x.value), V(Nucleus::createConstantInt(y))))));
} }
RValue<UShort8> psrlw(RValue<UShort8> x, unsigned char y) RValue<UShort8> psrlw(RValue<UShort8> x, unsigned char y)
{ {
llvm::Function *psrlw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psrli_w); llvm::Function *psrlw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psrli_w);
return RValue<UShort8>(V(::builder->CreateCall2(psrlw, V(x.value), V(Nucleus::createConstantInt(y))))); return RValue<UShort8>(V(::builder->CreateCall2(psrlw, ARGS(V(x.value), V(Nucleus::createConstantInt(y))))));
} }
RValue<Short4> psraw(RValue<Short4> x, unsigned char y) RValue<Short4> psraw(RValue<Short4> x, unsigned char y)
{ {
llvm::Function *psraw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psrai_w); llvm::Function *psraw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psrai_w);
return As<Short4>(V(::builder->CreateCall2(psraw, V(x.value), V(Nucleus::createConstantInt(y))))); return As<Short4>(V(::builder->CreateCall2(psraw, ARGS(V(x.value), V(Nucleus::createConstantInt(y))))));
} }
RValue<Short8> psraw(RValue<Short8> x, unsigned char y) RValue<Short8> psraw(RValue<Short8> x, unsigned char y)
{ {
llvm::Function *psraw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psrai_w); llvm::Function *psraw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psrai_w);
return RValue<Short8>(V(::builder->CreateCall2(psraw, V(x.value), V(Nucleus::createConstantInt(y))))); return RValue<Short8>(V(::builder->CreateCall2(psraw, ARGS(V(x.value), V(Nucleus::createConstantInt(y))))));
} }
RValue<Short4> psllw(RValue<Short4> x, unsigned char y) RValue<Short4> psllw(RValue<Short4> x, unsigned char y)
{ {
llvm::Function *psllw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pslli_w); llvm::Function *psllw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pslli_w);
return As<Short4>(V(::builder->CreateCall2(psllw, V(x.value), V(Nucleus::createConstantInt(y))))); return As<Short4>(V(::builder->CreateCall2(psllw, ARGS(V(x.value), V(Nucleus::createConstantInt(y))))));
} }
RValue<Short8> psllw(RValue<Short8> x, unsigned char y) RValue<Short8> psllw(RValue<Short8> x, unsigned char y)
{ {
llvm::Function *psllw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pslli_w); llvm::Function *psllw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pslli_w);
return RValue<Short8>(V(::builder->CreateCall2(psllw, V(x.value), V(Nucleus::createConstantInt(y))))); return RValue<Short8>(V(::builder->CreateCall2(psllw, ARGS(V(x.value), V(Nucleus::createConstantInt(y))))));
} }
RValue<Int2> pslld(RValue<Int2> x, unsigned char y) RValue<Int2> pslld(RValue<Int2> x, unsigned char y)
{ {
llvm::Function *pslld = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pslli_d); llvm::Function *pslld = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pslli_d);
return As<Int2>(V(::builder->CreateCall2(pslld, V(x.value), V(Nucleus::createConstantInt(y))))); return As<Int2>(V(::builder->CreateCall2(pslld, ARGS(V(x.value), V(Nucleus::createConstantInt(y))))));
} }
RValue<Int4> pslld(RValue<Int4> x, unsigned char y) RValue<Int4> pslld(RValue<Int4> x, unsigned char y)
{ {
llvm::Function *pslld = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pslli_d); llvm::Function *pslld = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pslli_d);
return RValue<Int4>(V(::builder->CreateCall2(pslld, V(x.value), V(Nucleus::createConstantInt(y))))); return RValue<Int4>(V(::builder->CreateCall2(pslld, ARGS(V(x.value), V(Nucleus::createConstantInt(y))))));
} }
RValue<Int2> psrad(RValue<Int2> x, unsigned char y) RValue<Int2> psrad(RValue<Int2> x, unsigned char y)
{ {
llvm::Function *psrad = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psrai_d); llvm::Function *psrad = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psrai_d);
return As<Int2>(V(::builder->CreateCall2(psrad, V(x.value), V(Nucleus::createConstantInt(y))))); return As<Int2>(V(::builder->CreateCall2(psrad, ARGS(V(x.value), V(Nucleus::createConstantInt(y))))));
} }
RValue<Int4> psrad(RValue<Int4> x, unsigned char y) RValue<Int4> psrad(RValue<Int4> x, unsigned char y)
{ {
llvm::Function *psrad = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psrai_d); llvm::Function *psrad = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psrai_d);
return RValue<Int4>(V(::builder->CreateCall2(psrad, V(x.value), V(Nucleus::createConstantInt(y))))); return RValue<Int4>(V(::builder->CreateCall2(psrad, ARGS(V(x.value), V(Nucleus::createConstantInt(y))))));
} }
RValue<UInt2> psrld(RValue<UInt2> x, unsigned char y) RValue<UInt2> psrld(RValue<UInt2> x, unsigned char y)
{ {
llvm::Function *psrld = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psrli_d); llvm::Function *psrld = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psrli_d);
return As<UInt2>(V(::builder->CreateCall2(psrld, V(x.value), V(Nucleus::createConstantInt(y))))); return As<UInt2>(V(::builder->CreateCall2(psrld, ARGS(V(x.value), V(Nucleus::createConstantInt(y))))));
} }
RValue<UInt4> psrld(RValue<UInt4> x, unsigned char y) RValue<UInt4> psrld(RValue<UInt4> x, unsigned char y)
{ {
llvm::Function *psrld = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psrli_d); llvm::Function *psrld = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_psrli_d);
return RValue<UInt4>(V(::builder->CreateCall2(psrld, V(x.value), V(Nucleus::createConstantInt(y))))); return RValue<UInt4>(V(::builder->CreateCall2(psrld, ARGS(V(x.value), V(Nucleus::createConstantInt(y))))));
} }
RValue<Int4> pmaxsd(RValue<Int4> x, RValue<Int4> y) RValue<Int4> pmaxsd(RValue<Int4> x, RValue<Int4> y)
{ {
llvm::Function *pmaxsd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_pmaxsd); llvm::Function *pmaxsd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_pmaxsd);
return RValue<Int4>(V(::builder->CreateCall2(pmaxsd, V(x.value), V(y.value)))); return RValue<Int4>(V(::builder->CreateCall2(pmaxsd, ARGS(V(x.value), V(y.value)))));
} }
RValue<Int4> pminsd(RValue<Int4> x, RValue<Int4> y) RValue<Int4> pminsd(RValue<Int4> x, RValue<Int4> y)
{ {
llvm::Function *pminsd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_pminsd); llvm::Function *pminsd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_pminsd);
return RValue<Int4>(V(::builder->CreateCall2(pminsd, V(x.value), V(y.value)))); return RValue<Int4>(V(::builder->CreateCall2(pminsd, ARGS(V(x.value), V(y.value)))));
} }
RValue<UInt4> pmaxud(RValue<UInt4> x, RValue<UInt4> y) RValue<UInt4> pmaxud(RValue<UInt4> x, RValue<UInt4> y)
{ {
llvm::Function *pmaxud = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_pmaxud); llvm::Function *pmaxud = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_pmaxud);
return RValue<UInt4>(V(::builder->CreateCall2(pmaxud, V(x.value), V(y.value)))); return RValue<UInt4>(V(::builder->CreateCall2(pmaxud, ARGS(V(x.value), V(y.value)))));
} }
RValue<UInt4> pminud(RValue<UInt4> x, RValue<UInt4> y) RValue<UInt4> pminud(RValue<UInt4> x, RValue<UInt4> y)
{ {
llvm::Function *pminud = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_pminud); llvm::Function *pminud = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_pminud);
return RValue<UInt4>(V(::builder->CreateCall2(pminud, V(x.value), V(y.value)))); return RValue<UInt4>(V(::builder->CreateCall2(pminud, ARGS(V(x.value), V(y.value)))));
} }
RValue<Short4> pmulhw(RValue<Short4> x, RValue<Short4> y) RValue<Short4> pmulhw(RValue<Short4> x, RValue<Short4> y)
{ {
llvm::Function *pmulhw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmulh_w); llvm::Function *pmulhw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmulh_w);
return As<Short4>(V(::builder->CreateCall2(pmulhw, V(x.value), V(y.value)))); return As<Short4>(V(::builder->CreateCall2(pmulhw, ARGS(V(x.value), V(y.value)))));
} }
RValue<UShort4> pmulhuw(RValue<UShort4> x, RValue<UShort4> y) RValue<UShort4> pmulhuw(RValue<UShort4> x, RValue<UShort4> y)
{ {
llvm::Function *pmulhuw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmulhu_w); llvm::Function *pmulhuw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmulhu_w);
return As<UShort4>(V(::builder->CreateCall2(pmulhuw, V(x.value), V(y.value)))); return As<UShort4>(V(::builder->CreateCall2(pmulhuw, ARGS(V(x.value), V(y.value)))));
} }
RValue<Int2> pmaddwd(RValue<Short4> x, RValue<Short4> y) RValue<Int2> pmaddwd(RValue<Short4> x, RValue<Short4> y)
{ {
llvm::Function *pmaddwd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmadd_wd); llvm::Function *pmaddwd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmadd_wd);
return As<Int2>(V(::builder->CreateCall2(pmaddwd, V(x.value), V(y.value)))); return As<Int2>(V(::builder->CreateCall2(pmaddwd, ARGS(V(x.value), V(y.value)))));
} }
RValue<Short8> pmulhw(RValue<Short8> x, RValue<Short8> y) RValue<Short8> pmulhw(RValue<Short8> x, RValue<Short8> y)
{ {
llvm::Function *pmulhw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmulh_w); llvm::Function *pmulhw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmulh_w);
return RValue<Short8>(V(::builder->CreateCall2(pmulhw, V(x.value), V(y.value)))); return RValue<Short8>(V(::builder->CreateCall2(pmulhw, ARGS(V(x.value), V(y.value)))));
} }
RValue<UShort8> pmulhuw(RValue<UShort8> x, RValue<UShort8> y) RValue<UShort8> pmulhuw(RValue<UShort8> x, RValue<UShort8> y)
{ {
llvm::Function *pmulhuw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmulhu_w); llvm::Function *pmulhuw = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmulhu_w);
return RValue<UShort8>(V(::builder->CreateCall2(pmulhuw, V(x.value), V(y.value)))); return RValue<UShort8>(V(::builder->CreateCall2(pmulhuw, ARGS(V(x.value), V(y.value)))));
} }
RValue<Int4> pmaddwd(RValue<Short8> x, RValue<Short8> y) RValue<Int4> pmaddwd(RValue<Short8> x, RValue<Short8> y)
{ {
llvm::Function *pmaddwd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmadd_wd); llvm::Function *pmaddwd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmadd_wd);
return RValue<Int4>(V(::builder->CreateCall2(pmaddwd, V(x.value), V(y.value)))); return RValue<Int4>(V(::builder->CreateCall2(pmaddwd, ARGS(V(x.value), V(y.value)))));
} }
RValue<Int> movmskps(RValue<Float4> x) RValue<Int> movmskps(RValue<Float4> x)
{ {
llvm::Function *movmskps = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse_movmsk_ps); llvm::Function *movmskps = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse_movmsk_ps);
return RValue<Int>(V(::builder->CreateCall(movmskps, V(x.value)))); return RValue<Int>(V(::builder->CreateCall(movmskps, ARGS(V(x.value)))));
} }
RValue<Int> pmovmskb(RValue<Byte8> x) RValue<Int> pmovmskb(RValue<Byte8> x)
{ {
llvm::Function *pmovmskb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmovmskb_128); llvm::Function *pmovmskb = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse2_pmovmskb_128);
return RValue<Int>(V(::builder->CreateCall(pmovmskb, V(x.value)))) & 0xFF; return RValue<Int>(V(::builder->CreateCall(pmovmskb, ARGS(V(x.value))))) & 0xFF;
} }
RValue<Int4> pmovzxbd(RValue<Byte16> x) RValue<Int4> pmovzxbd(RValue<Byte16> x)
{ {
llvm::Function *pmovzxbd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_pmovzxbd); llvm::Function *pmovzxbd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_pmovzxbd);
return RValue<Int4>(V(::builder->CreateCall(pmovzxbd, V(x.value)))); return RValue<Int4>(V(::builder->CreateCall(pmovzxbd, ARGS(V(x.value)))));
} }
RValue<Int4> pmovsxbd(RValue<SByte16> x) RValue<Int4> pmovsxbd(RValue<SByte16> x)
{ {
llvm::Function *pmovsxbd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_pmovsxbd); llvm::Function *pmovsxbd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_pmovsxbd);
return RValue<Int4>(V(::builder->CreateCall(pmovsxbd, V(x.value)))); return RValue<Int4>(V(::builder->CreateCall(pmovsxbd, ARGS(V(x.value)))));
} }
RValue<Int4> pmovzxwd(RValue<UShort8> x) RValue<Int4> pmovzxwd(RValue<UShort8> x)
{ {
llvm::Function *pmovzxwd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_pmovzxwd); llvm::Function *pmovzxwd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_pmovzxwd);
return RValue<Int4>(V(::builder->CreateCall(pmovzxwd, V(x.value)))); return RValue<Int4>(V(::builder->CreateCall(pmovzxwd, ARGS(V(x.value)))));
} }
RValue<Int4> pmovsxwd(RValue<Short8> x) RValue<Int4> pmovsxwd(RValue<Short8> x)
{ {
llvm::Function *pmovsxwd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_pmovsxwd); llvm::Function *pmovsxwd = llvm::Intrinsic::getDeclaration(::module, llvm::Intrinsic::x86_sse41_pmovsxwd);
return RValue<Int4>(V(::builder->CreateCall(pmovsxwd, V(x.value)))); return RValue<Int4>(V(::builder->CreateCall(pmovsxwd, ARGS(V(x.value)))));
} }
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment