From 3d8814a9bfd7f84093b1475edba7dbd78f4b54e4 Mon Sep 17 00:00:00 2001 From: mdoerr Date: Fri, 25 Nov 2016 11:15:12 -0200 Subject: [PATCH] 8170328: PPC64: Use andis instead of lis/and Reviewed-by: goetz, mdoerr Contributed-by: Igor Nunes --- src/cpu/ppc/vm/ppc.ad | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/cpu/ppc/vm/ppc.ad b/src/cpu/ppc/vm/ppc.ad index f6bdfe2bb..5d1df9754 100644 --- a/src/cpu/ppc/vm/ppc.ad +++ b/src/cpu/ppc/vm/ppc.ad @@ -8889,6 +8889,19 @@ instruct andI_reg_reg(iRegIdst dst, iRegIsrc src1, iRegIsrc src2) %{ ins_pipe(pipe_class_default); %} +// Left shifted Immediate And +instruct andI_reg_immIhi16(iRegIdst dst, iRegIsrc src1, immIhi16 src2, flagsRegCR0 cr0) %{ + match(Set dst (AndI src1 src2)); + effect(KILL cr0); + format %{ "ANDIS $dst, $src1, $src2.hi" %} + size(4); + ins_encode %{ + // TODO: PPC port $archOpcode(ppc64Opcode_andis_); + __ andis_($dst$$Register, $src1$$Register, (int)((unsigned short)(($src2$$constant & 0xFFFF0000) >> 16))); + %} + ins_pipe(pipe_class_default); +%} + // Immediate And instruct andI_reg_uimm16(iRegIdst dst, iRegIsrc src1, uimmI16 src2, flagsRegCR0 cr0) %{ match(Set dst (AndI src1 src2)); -- GitLab