Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void recPABSW() //needs clamping
- {
- if( !_Rd_ ) return;
- EE::Profiler.EmitOp(eeOpcode::PABSW);
- int info = eeRecompileCodeXMM( XMMINFO_READT|XMMINFO_WRITED );
- int t0reg = _allocTempXMMreg(XMMT_INT, -1);
- if( x86caps.hasSupplementalStreamingSIMD3Extensions ) {
- xPABS.D(xRegisterSSE(EEREC_D), xRegisterSSE(EEREC_T)); //0x80000000 -> 0x80000000
- xMOVDQA(xRegisterSSE(t0reg), xRegisterSSE(EEREC_D));
- xPSRA.D(xRegisterSSE(t0reg), 31); //0x80000000 is the only possible negative number resulting from pabs
- }
- else {
- xMOVDQA(xRegisterSSE(t0reg), xRegisterSSE(EEREC_T));
- xMOVDQA(xRegisterSSE(EEREC_D), xRegisterSSE(EEREC_T));
- xPSRA.D(xRegisterSSE(t0reg), 31);
- xPXOR(xRegisterSSE(EEREC_D), xRegisterSSE(t0reg));
- xPSUB.D(xRegisterSSE(EEREC_D), xRegisterSSE(t0reg)); //0x80000000 -> 0x80000000
- xPCMP.GTD(xRegisterSSE(t0reg), xRegisterSSE(EEREC_D));
- }
- xPXOR(xRegisterSSE(EEREC_D), xRegisterSSE(t0reg)); //0x80000000 -> 0x7fffffff
- _freeXMMreg(t0reg);
- _clearNeededXMMregs();
- }
- void recPABSH()
- {
- if( !_Rd_ ) return;
- EE::Profiler.EmitOp(eeOpcode::PABSH);
- int info = eeRecompileCodeXMM( XMMINFO_READT|XMMINFO_WRITED );
- int t0reg = _allocTempXMMreg(XMMT_INT, -1);
- if( x86caps.hasSupplementalStreamingSIMD3Extensions ) {
- xPABS.W(xRegisterSSE(EEREC_D), xRegisterSSE(EEREC_T)); //0x8000 -> 0x8000
- xMOVDQA(xRegisterSSE(t0reg), xRegisterSSE(EEREC_D));
- xPSRA.W(xRegisterSSE(t0reg), 15); //0x8000 is the only possible negative number resulting from pabs
- xPXOR(xRegisterSSE(EEREC_D), xRegisterSSE(t0reg)); //0x8000 -> 0x7fff
- }
- else {
- xMOVDQA(xRegisterSSE(t0reg), xRegisterSSE(EEREC_T));
- xMOVDQA(xRegisterSSE(EEREC_D), xRegisterSSE(EEREC_T));
- xPSRA.W(xRegisterSSE(t0reg), 15);
- xPXOR(xRegisterSSE(EEREC_D), xRegisterSSE(t0reg));
- xPSUB.SW(xRegisterSSE(EEREC_D), xRegisterSSE(t0reg)); //0x8000 -> 0x7fff
- }
- _freeXMMreg(t0reg);
- _clearNeededXMMregs();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement