16cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov%default {"preinstr":"", "instr":"", "wide":"0"} 26cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov/* 36cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov * Generic 32/64-bit unary operation. Provide an "instr" line that 46cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov * specifies an instruction that performs "result = op eax". 56cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov */ 66cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov /* unop vA, vB */ 76cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov movl rINST, %ecx # rcx <- A+ 86cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov sarl $$4,rINST # rINST <- B 96cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov .if ${wide} 106cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov GET_WIDE_VREG %rax, rINSTq # rax <- vB 116cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov .else 126cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov GET_VREG %eax, rINSTq # eax <- vB 136cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov .endif 146cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov andb $$0xf,%cl # ecx <- A 156cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov$preinstr 166cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov$instr 176cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov .if ${wide} 186cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov SET_WIDE_VREG %rax, %rcx 196cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov .else 206cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov SET_VREG %eax, %rcx 216cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov .endif 226cbe0814952bd3bbb329c4ca4dc683ac87c2c2deSerguei Katkov ADVANCE_PC_FETCH_AND_GOTO_NEXT 1 23