%verify "executed" %verify "basic lt, gt, eq" %verify "hi equal, lo <=>" %verify "lo equal, hi <=>" /* * Compare two 64-bit values. Puts 0, 1, or -1 into the destination * register based on the results of the comparison. */ // TUNING: rework to avoid rIBASE spill /* cmp-long vAA, vBB, vCC */ movzbl 2(rPC),%ecx # ecx<- BB SPILL(rIBASE) movzbl 3(rPC),rIBASE # rIBASE- CC GET_VREG_WORD %eax %ecx,1 # eax<- v[BB+1] GET_VREG_WORD %ecx %ecx 0 # ecx<- v[BB+0] cmpl 4(rFP,rIBASE,4),%eax jl .L${opcode}_smaller jg .L${opcode}_bigger sub (rFP,rIBASE,4),%ecx ja .L${opcode}_bigger jb .L${opcode}_smaller SET_VREG %ecx rINST FETCH_INST_OPCODE 2 %ecx UNSPILL(rIBASE) ADVANCE_PC 2 GOTO_NEXT_R %ecx .L${opcode}_bigger: movl $$1,%ecx SET_VREG %ecx rINST FETCH_INST_OPCODE 2 %ecx UNSPILL(rIBASE) ADVANCE_PC 2 GOTO_NEXT_R %ecx .L${opcode}_smaller: movl $$-1,%ecx SET_VREG %ecx rINST FETCH_INST_OPCODE 2 %ecx UNSPILL(rIBASE) ADVANCE_PC 2 GOTO_NEXT_R %ecx