| Index: src/x64/assembler-x64.h
|
| ===================================================================
|
| --- src/x64/assembler-x64.h (revision 2085)
|
| +++ src/x64/assembler-x64.h (working copy)
|
| @@ -558,22 +558,39 @@
|
|
|
| void rcl(Register dst, uint8_t imm8);
|
|
|
| - void sar(Register dst, uint8_t imm8);
|
| - void sar(Register dst);
|
| -
|
| void sbb(Register dst, const Operand& src);
|
|
|
| void shld(Register dst, const Operand& src);
|
|
|
| - void shl(Register dst, uint8_t imm8);
|
| - void shl(Register dst);
|
| -
|
| void shrd(Register dst, const Operand& src);
|
|
|
| - void shr(Register dst, uint8_t imm8);
|
| - void shr(Register dst);
|
| - void shr_cl(Register dst);
|
| + // Shifts dst right, duplicating sign bit, by shift_amount bits.
|
| + // Shifting by 1 is handled efficiently.
|
| + void sar(Register dst, Immediate shift_amount) {
|
| + shift(dst, shift_amount, 0x7);
|
| + }
|
|
|
| + // Shifts dst right, duplicating sign bit, by cl % 64 bits.
|
| + void sar(Register dst) {
|
| + shift(dst, 0x7);
|
| + }
|
| +
|
| + void shl(Register dst, Immediate shift_amount) {
|
| + shift(dst, shift_amount, 0x4);
|
| + }
|
| +
|
| + void shl(Register dst) {
|
| + shift(dst, 0x4);
|
| + }
|
| +
|
| + void shr(Register dst, Immediate shift_amount) {
|
| + shift(dst, shift_amount, 0x5);
|
| + }
|
| +
|
| + void shr(Register dst) {
|
| + shift(dst, 0x5);
|
| + }
|
| +
|
| void sub(Register dst, Register src) {
|
| arithmetic_op(0x2B, dst, src);
|
| }
|
| @@ -884,6 +901,10 @@
|
| void arithmetic_op(byte opcode, Register reg, const Operand& op);
|
| void immediate_arithmetic_op(byte subcode, Register dst, Immediate src);
|
| void immediate_arithmetic_op(byte subcode, const Operand& dst, Immediate src);
|
| + // Emit machine code for a shift operation.
|
| + void shift(Register dst, Immediate shift_amount, int subcode);
|
| + // Shift dst by cl % 64 bits.
|
| + void shift(Register dst, int subcode);
|
|
|
| void emit_farith(int b1, int b2, int i);
|
|
|
|
|