Blame SOURCES/8170328-pr3466-rh1498321.patch

a42b25
# HG changeset patch
a42b25
# User mdoerr
a42b25
# Date 1480079712 7200
a42b25
#      Fri Nov 25 11:15:12 2016 -0200
a42b25
# Node ID 3c499a0ba92b1affb3f473c6502e374f4785aba9
a42b25
# Parent  9b9d9e11c04d5e5f64829d34752e5c94b1c7d911
a42b25
8170328, PR3466, RH1498321: PPC64: Use andis instead of lis/and
a42b25
Reviewed-by: goetz, mdoerr
a42b25
Contributed-by: Igor Nunes <igor.nunes@eldorado.org.br>
a42b25
a42b25
diff --git a/src/cpu/ppc/vm/ppc.ad b/src/cpu/ppc/vm/ppc.ad
a42b25
--- openjdk/hotspot/src/cpu/ppc/vm/ppc.ad
a42b25
+++ openjdk/hotspot/src/cpu/ppc/vm/ppc.ad
a42b25
@@ -8889,6 +8889,19 @@
a42b25
   ins_pipe(pipe_class_default);
a42b25
 %}
a42b25
 
a42b25
+// Left shifted Immediate And
a42b25
+instruct andI_reg_immIhi16(iRegIdst dst, iRegIsrc src1, immIhi16  src2, flagsRegCR0 cr0) %{
a42b25
+  match(Set dst (AndI src1 src2));
a42b25
+  effect(KILL cr0);
a42b25
+  format %{ "ANDIS   $dst, $src1, $src2.hi" %}
a42b25
+  size(4);
a42b25
+  ins_encode %{
a42b25
+    // TODO: PPC port $archOpcode(ppc64Opcode_andis_);
a42b25
+    __ andis_($dst$$Register, $src1$$Register, (int)((unsigned short)(($src2$$constant & 0xFFFF0000) >> 16)));
a42b25
+  %}
a42b25
+  ins_pipe(pipe_class_default);
a42b25
+%}
a42b25
+
a42b25
 // Immediate And
a42b25
 instruct andI_reg_uimm16(iRegIdst dst, iRegIsrc src1, uimmI16 src2, flagsRegCR0 cr0) %{
a42b25
   match(Set dst (AndI src1 src2));