Mercurial > hg > graal-compiler
diff graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64MacroAssembler.java @ 20085:5a42f9b582c6
AMD64Assembler: introduce DEC and incrementq/decrementq macros for AMD64Addresses.
author | Josef Eisl <josef.eisl@jku.at> |
---|---|
date | Mon, 30 Mar 2015 15:38:24 +0200 |
parents | 89c729e9e0a4 |
children | 3c66c48a28f3 |
line wrap: on
line diff
--- a/graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64MacroAssembler.java Mon Mar 30 16:51:26 2015 +0200 +++ b/graal/com.oracle.graal.asm.amd64/src/com/oracle/graal/asm/amd64/AMD64MacroAssembler.java Mon Mar 30 15:38:24 2015 +0200 @@ -56,6 +56,25 @@ } } + public final void decrementq(AMD64Address dst, int value) { + if (value == Integer.MIN_VALUE) { + subq(dst, value); + return; + } + if (value < 0) { + incrementq(dst, -value); + return; + } + if (value == 0) { + return; + } + if (value == 1 && UseIncDec) { + decq(dst); + } else { + subq(dst, value); + } + } + public void incrementq(Register reg, int value) { if (value == Integer.MIN_VALUE) { addq(reg, value); @@ -75,6 +94,25 @@ } } + public final void incrementq(AMD64Address dst, int value) { + if (value == Integer.MIN_VALUE) { + addq(dst, value); + return; + } + if (value < 0) { + decrementq(dst, -value); + return; + } + if (value == 0) { + return; + } + if (value == 1 && UseIncDec) { + incq(dst); + } else { + addq(dst, value); + } + } + public final void movptr(Register dst, AMD64Address src) { movq(dst, src); }