• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1/*
2 * Compare two 64-bit values.  Puts 0, 1, or -1 into the destination
3 * register based on the results of the comparison.
4 */
5    /* cmp-long vAA, vBB, vCC */
6    movzbl  2(rPC), %eax                    # eax <- BB
7    movzbl  3(rPC), %ecx                    # ecx <- CC
8    GET_VREG_HIGH %eax, %eax                # eax <- v[BB+1], BB is clobbered
9    cmpl    VREG_HIGH_ADDRESS(%ecx), %eax
10    jl      .L${opcode}_smaller
11    jg      .L${opcode}_bigger
12    movzbl  2(rPC), %eax                    # eax <- BB, restore BB
13    GET_VREG %eax, %eax                     # eax <- v[BB]
14    sub     VREG_ADDRESS(%ecx), %eax
15    ja      .L${opcode}_bigger
16    jb      .L${opcode}_smaller
17.L${opcode}_finish:
18    SET_VREG %eax, rINST
19    ADVANCE_PC_FETCH_AND_GOTO_NEXT 2
20
21.L${opcode}_bigger:
22    movl    $$1, %eax
23    jmp     .L${opcode}_finish
24
25.L${opcode}_smaller:
26    movl    $$-1, %eax
27    jmp     .L${opcode}_finish
28