blob: 5202c27fedf3215e4bc074064b162cf505dc2bc0 [file] [log] [blame]
%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