blob: 3b1afbc592a8c6e3b209d02d0c2806f6de6653da [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.
*/
/* cmp-long vAA, vBB, vCC */
movzbl 2(rPC),%ecx # ecx<- BB
SPILL(rPC)
movzbl 3(rPC),rPC # rPC<- CC
GET_VREG_WORD(%eax,%ecx,1) # eax<- v[BB+1]
GET_VREG_WORD(%ecx,%ecx,0) # ecx<- v[BB+0]
movzbl rINST_HI,rINST_FULL # rINST_FULL<- AA
cmpl 4(rFP,rPC,4),%eax
jl .L${opcode}_smaller
jg .L${opcode}_bigger
sub (rFP,rPC,4),%ecx
ja .L${opcode}_bigger
jb .L${opcode}_smaller
UNSPILL(rPC)
jmp .L${opcode}_finish
%break
.L${opcode}_bigger:
UNSPILL(rPC)
movl $$1,%ecx
jmp .L${opcode}_finish
.L${opcode}_smaller:
UNSPILL(rPC)
movl $$-1,%ecx
.L${opcode}_finish:
SET_VREG(%ecx,rINST_FULL)
FETCH_INST_WORD(2)
ADVANCE_PC(2)
GOTO_NEXT