diff options
Diffstat (limited to 'src/video_core/shader')
| -rw-r--r-- | src/video_core/shader/shader_jit_x64.cpp | 22 | ||||
| -rw-r--r-- | src/video_core/shader/shader_jit_x64.h | 2 | 
2 files changed, 22 insertions, 2 deletions
diff --git a/src/video_core/shader/shader_jit_x64.cpp b/src/video_core/shader/shader_jit_x64.cpp index 836942c6b..93f608584 100644 --- a/src/video_core/shader/shader_jit_x64.cpp +++ b/src/video_core/shader/shader_jit_x64.cpp @@ -25,8 +25,8 @@ const JitFunction instr_table[64] = {      &JitCompiler::Compile_DP4,      // dp4      nullptr,                        // dph      nullptr,                        // unknown -    nullptr,                        // ex2 -    nullptr,                        // lg2 +    &JitCompiler::Compile_EX2,      // ex2 +    &JitCompiler::Compile_LG2,      // lg2      nullptr,                        // unknown      &JitCompiler::Compile_MUL,      // mul      nullptr,                        // lge @@ -331,6 +331,24 @@ void JitCompiler::Compile_DP4(Instruction instr) {      Compile_DestEnable(instr, SRC1);  } +void JitCompiler::Compile_EX2(Instruction instr) { +    Compile_SwizzleSrc(instr, 1, instr.common.src1, SRC1); +    MOVSS(XMM0, R(SRC1)); +    ABI_CallFunction(reinterpret_cast<const void*>(exp2f)); +    SHUFPS(XMM0, R(XMM0), _MM_SHUFFLE(0, 0, 0, 0)); +    MOVAPS(SRC1, R(XMM0)); +    Compile_DestEnable(instr, SRC1); +} + +void JitCompiler::Compile_LG2(Instruction instr) { +    Compile_SwizzleSrc(instr, 1, instr.common.src1, SRC1); +    MOVSS(XMM0, R(SRC1)); +    ABI_CallFunction(reinterpret_cast<const void*>(log2f)); +    SHUFPS(XMM0, R(XMM0), _MM_SHUFFLE(0, 0, 0, 0)); +    MOVAPS(SRC1, R(XMM0)); +    Compile_DestEnable(instr, SRC1); +} +  void JitCompiler::Compile_MUL(Instruction instr) {      Compile_SwizzleSrc(instr, 1, instr.common.src1, SRC1);      Compile_SwizzleSrc(instr, 2, instr.common.src2, SRC2); diff --git a/src/video_core/shader/shader_jit_x64.h b/src/video_core/shader/shader_jit_x64.h index b88f2a0d2..104f9f466 100644 --- a/src/video_core/shader/shader_jit_x64.h +++ b/src/video_core/shader/shader_jit_x64.h @@ -37,6 +37,8 @@ public:      void Compile_ADD(Instruction instr);      void Compile_DP3(Instruction instr);      void Compile_DP4(Instruction instr); +    void Compile_EX2(Instruction instr); +    void Compile_LG2(Instruction instr);      void Compile_MUL(Instruction instr);      void Compile_FLR(Instruction instr);      void Compile_MAX(Instruction instr);  | 
