unit emit_SOPC; {$mode objfpc}{$H+} interface uses sysutils, spirv, ps4_pssl, srType, srReg, emit_fetch; type TEmit_SOPC=class(TEmitFetch) procedure emit_SOPC; procedure emit_S_CMP_32(OpId:DWORD;rtype:TsrDataType); end; implementation procedure TEmit_SOPC.emit_S_CMP_32(OpId:DWORD;rtype:TsrDataType); Var dst:PsrRegSlot; src:array[0..1] of TsrRegNode; begin dst:=get_scc; src[0]:=fetch_ssrc9(FSPI.SOPC.SSRC0,rtype); src[1]:=fetch_ssrc9(FSPI.SOPC.SSRC1,rtype); OpCmpS(OpId,dst,src[0],src[1]); end; procedure TEmit_SOPC.emit_SOPC; begin Case FSPI.SOPC.OP of S_CMP_EQ_I32 :emit_S_CMP_32(Op.OpIEqual ,dtInt32); S_CMP_LG_I32 :emit_S_CMP_32(Op.OpINotEqual ,dtInt32); S_CMP_GT_I32 :emit_S_CMP_32(Op.OpSGreaterThan ,dtInt32); S_CMP_GE_I32 :emit_S_CMP_32(Op.OpSGreaterThanEqual,dtInt32); S_CMP_LT_I32 :emit_S_CMP_32(Op.OpSLessThan ,dtInt32); S_CMP_LE_I32 :emit_S_CMP_32(Op.OpSLessThanEqual ,dtInt32); S_CMP_EQ_U32 :emit_S_CMP_32(Op.OpIEqual ,dtUint32); S_CMP_LG_U32 :emit_S_CMP_32(Op.OpINotEqual ,dtUint32); S_CMP_GT_U32 :emit_S_CMP_32(Op.OpUGreaterThan ,dtUint32); S_CMP_GE_U32 :emit_S_CMP_32(Op.OpUGreaterThanEqual,dtUint32); S_CMP_LT_U32 :emit_S_CMP_32(Op.OpULessThan ,dtUint32); S_CMP_LE_U32 :emit_S_CMP_32(Op.OpULessThanEqual ,dtUint32); //S_BITCMP0_B32:; //S_BITCMP1_B32:; //S_BITCMP0_B64:; //S_BITCMP1_B64:; //S_SETVSKIP :; else Assert(false,'SOPC?'+IntToStr(FSPI.SOPC.OP)+' '+get_str_spi(FSPI)); end; end; end.