summaryrefslogtreecommitdiff
path: root/vm/mterp/x86/unop.S
blob: 7192d9a960ae58eab5290771213b9a58cbb9bd03 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
%default {"pre0":"","pre1":""}
    /*
     * Generic 32-bit unary operation.  Provide an "instr" line that
     * specifies an instruction that performs "result = op eax".
     */
    /* unop vA, vB */
    movzbl   rINST_HI,%ecx           # ecx<- A+
    sarl     $$12,rINST_FULL         # rINST_FULL<- B
    GET_VREG(%eax,rINST_FULL)        # eax<- vB
    andb     $$0xf,%cl               # ecx<- A
    FETCH_INST_WORD(1)
    ADVANCE_PC(1)
    $pre0
    $pre1
    $instr
    SET_VREG(%eax,%ecx)
    GOTO_NEXT