OpenJDK / portola / portola
changeset 50730:365e137617ff
8205474: AARCH64: wrong zr encoding for ccmp instruction
Reviewed-by: aph
author | dpochepk |
---|---|
date | Fri, 22 Jun 2018 18:49:45 +0300 |
parents | 77fdd64c6334 |
children | 5698cf4e50f1 c55b1386f119 |
files | src/hotspot/cpu/aarch64/assembler_aarch64.hpp |
diffstat | 1 files changed, 7 insertions(+), 8 deletions(-) [+] |
line wrap: on
line diff
--- a/src/hotspot/cpu/aarch64/assembler_aarch64.hpp Fri Jun 22 18:48:36 2018 +0300 +++ b/src/hotspot/cpu/aarch64/assembler_aarch64.hpp Fri Jun 22 18:49:45 2018 +0300 @@ -1638,12 +1638,14 @@ #undef INSN // Conditional compare (both kinds) - void conditional_compare(unsigned op, int o2, int o3, + void conditional_compare(unsigned op, int o1, int o2, int o3, Register Rn, unsigned imm5, unsigned nzcv, unsigned cond) { + starti; f(op, 31, 29); f(0b11010010, 28, 21); f(cond, 15, 12); + f(o1, 11); f(o2, 10); f(o3, 4); f(nzcv, 3, 0); @@ -1652,15 +1654,12 @@ #define INSN(NAME, op) \ void NAME(Register Rn, Register Rm, int imm, Condition cond) { \ - starti; \ - f(0, 11); \ - conditional_compare(op, 0, 0, Rn, (uintptr_t)Rm, imm, cond); \ + int regNumber = (Rm == zr ? 31 : (uintptr_t)Rm); \ + conditional_compare(op, 0, 0, 0, Rn, regNumber, imm, cond); \ } \ \ - void NAME(Register Rn, int imm5, int imm, Condition cond) { \ - starti; \ - f(1, 11); \ - conditional_compare(op, 0, 0, Rn, imm5, imm, cond); \ + void NAME(Register Rn, int imm5, int imm, Condition cond) { \ + conditional_compare(op, 1, 0, 0, Rn, imm5, imm, cond); \ } INSN(ccmnw, 0b001);