diff --git a/XenonRecomp/recompiler.cpp b/XenonRecomp/recompiler.cpp index b2729b5..d50a1f2 100644 --- a/XenonRecomp/recompiler.cpp +++ b/XenonRecomp/recompiler.cpp @@ -2370,6 +2370,14 @@ bool Recompiler::Recompile( } break; + case PPC_INST_VPKUHUM: + // Pack without saturation - use shuffle to select lower bytes + println("\t_mm_store_si128((__m128i*){}.u8, _mm_packus_epi16(" + "_mm_and_si128(_mm_load_si128((__m128i*){}.u16), _mm_set1_epi16(0xFF)), " + "_mm_and_si128(_mm_load_si128((__m128i*){}.u16), _mm_set1_epi16(0xFF))));", + v(insn.operands[0]), v(insn.operands[2]), v(insn.operands[1])); + break; + case PPC_INST_VPKUWUM: case PPC_INST_VPKUWUM128: println("\t_mm_store_si128((__m128i*){}.u32, _mm_load_si128((__m128i*){}.u32));", vTemp(), v(insn.operands[2]));