mirror of
https://github.com/hedge-dev/XenonRecomp.git
synced 2025-10-30 07:11:38 +00:00
Implement vslh, vsrah, vsrh, vrlh
This commit is contained in:
parent
6b4c165a9b
commit
fa0c77c2ac
1 changed files with 35 additions and 0 deletions
|
|
@ -2468,6 +2468,36 @@ bool Recompiler::Recompile(
|
|||
println("\t{}.u8[{}] = {}.u8[{}] << ({}.u8[{}] & 0x7);", v(insn.operands[0]), i, v(insn.operands[1]), i, v(insn.operands[2]), i);
|
||||
break;
|
||||
|
||||
case PPC_INST_VSLH:
|
||||
// Vector shift left halfword
|
||||
for (size_t i = 0; i < 8; i++)
|
||||
println("\t{}.u16[{}] = {}.u16[{}] << ({}.u16[{}] & 0xF);",
|
||||
v(insn.operands[0]), i, v(insn.operands[1]), i, v(insn.operands[2]), i);
|
||||
break;
|
||||
|
||||
case PPC_INST_VSRAH:
|
||||
// Vector shift right algebraic halfword
|
||||
for (size_t i = 0; i < 8; i++)
|
||||
println("\t{}.s16[{}] = {}.s16[{}] >> ({}.u16[{}] & 0xF);",
|
||||
v(insn.operands[0]), i, v(insn.operands[1]), i, v(insn.operands[2]), i);
|
||||
break;
|
||||
|
||||
case PPC_INST_VSRH:
|
||||
// Vector shift right halfword
|
||||
for (size_t i = 0; i < 8; i++)
|
||||
println("\t{}.u16[{}] = {}.u16[{}] >> ({}.u16[{}] & 0xF);",
|
||||
v(insn.operands[0]), i, v(insn.operands[1]), i, v(insn.operands[2]), i);
|
||||
break;
|
||||
|
||||
case PPC_INST_VRLH:
|
||||
// Vector rotate left halfword
|
||||
for (size_t i = 0; i < 8; i++)
|
||||
println("\t{}.u16[{}] = ({}.u16[{}] << ({}.u16[{}] & 0xF)) | "
|
||||
"({}.u16[{}] >> (16 - ({}.u16[{}] & 0xF)));",
|
||||
v(insn.operands[0]), i, v(insn.operands[1]), i, v(insn.operands[2]), i,
|
||||
v(insn.operands[1]), i, v(insn.operands[2]), i);
|
||||
break;
|
||||
|
||||
case PPC_INST_VSLDOI:
|
||||
case PPC_INST_VSLDOI128:
|
||||
println("\t_mm_store_si128((__m128i*){}.u8, _mm_alignr_epi8(_mm_load_si128((__m128i*){}.u8), _mm_load_si128((__m128i*){}.u8), {}));", v(insn.operands[0]), v(insn.operands[1]), v(insn.operands[2]), 16 - insn.operands[3]);
|
||||
|
|
@ -2501,6 +2531,11 @@ bool Recompiler::Recompile(
|
|||
println("\t_mm_store_si128((__m128i*){}.u8, _mm_set1_epi8(char(0x{:X})));", v(insn.operands[0]), insn.operands[1]);
|
||||
break;
|
||||
|
||||
case PPC_INST_VSPLTISH:
|
||||
println("\t_mm_store_si128((__m128i*){}.s16, _mm_set1_epi16(short({})));",
|
||||
v(insn.operands[0]), int16_t(insn.operands[1]));
|
||||
break;
|
||||
|
||||
case PPC_INST_VSPLTISW:
|
||||
case PPC_INST_VSPLTISW128:
|
||||
println("\t_mm_store_si128((__m128i*){}.u32, _mm_set1_epi32(int(0x{:X})));", v(insn.operands[0]), insn.operands[1]);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue