<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
{font-family:"Cambria Math";
panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
{font-family:DengXian;
panose-1:2 1 6 0 3 1 1 1 1 1;}
@font-face
{font-family:DengXian;
panose-1:2 1 6 0 3 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0cm;
margin-bottom:.0001pt;
text-align:justify;
text-justify:inter-ideograph;
font-size:10.5pt;
font-family:DengXian;}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:#0563C1;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:#954F72;
text-decoration:underline;}
span.EmailStyle17
{mso-style-type:personal-compose;
font-family:"Calibri",sans-serif;
color:windowtext;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri",sans-serif;}
/* Page Definitions */
@page WordSection1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="ZH-CN" link="#0563C1" vlink="#954F72" style="text-justify-trim:punctuation">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">Hi, guys,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">We have found a suspected C2 bug of Aarch64 port, randomly crashed in the arm64 server, and existed since day one from the initial commit and on all Java 8+ versions.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">C2 uses JNI handles as placeholders to encoding constant oops, and one of some handle maybe locate at the address of byte_map_base, which is not memory reserved by CardTableModRefBS byte_map.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> // The assember store_check code will do an unsigned shift of the oop,<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> // then add it to byte_map_base, i.e.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> //<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> // _byte_map = byte_map_base + (uintptr_t(low_bound) >> card_shift)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> _byte_map = (jbyte*) heap_rs.base();<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> byte_map_base = _byte_map - (uintptr_t(low_bound) >> card_shift);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">C2 will incorrectly match ConP of oop to ConP of byte_map_base in aarch64.ad.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">// Card Table Byte Map Base<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">operand immByteMapBase()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">%{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> // Get base of card map<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> predicate((jbyte*)n->get_ptr() ==<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> ((CardTableModRefBS*)(Universe::heap()->barrier_set()))->byte_map_base);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> match(ConP);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> op_cost(0);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> format %{ %}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> interface(CONST_INTER);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">%}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">// Load Byte Map Base Constant<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">instruct loadByteMapBase(iRegPNoSp dst, immByteMapBase con)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">%{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> match(Set dst con);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> ins_cost(INSN_COST);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> format %{ "adr $dst, $con\t# Byte Map Base" %}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> ins_encode(aarch64_enc_mov_byte_map_base(dst, con));<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> ins_pipe(ialu_imm);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">%}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">A typical backtrace as below:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#0 0x0000ffff280866e0 in raise () from /lib64/libc.so.6<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#1 0x0000ffff28087a8c in abort () from /lib64/libc.so.6<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#2 0x0000ffff27af1e7c in os::abort (dump_core=true, siginfo=<optimized out>, context=<optimized out>)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> at /usr1/jenkins/BiShengJDK/open_source/openjdk/openjdk/hotspot/src/os/linux/vm/os_linux.cpp:1601<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#3 0x0000ffff27cd48a0 in VMError::report_and_die (this=this@entry=0xffff270f6c58) at /usr1/jenkins/BiShengJDK/open_source/openjdk/openjdk/hotspot/src/share/vm/utilities/vmError.cpp:1159<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#4 0x0000ffff27aff4dc in JVM_handle_linux_signal (sig=11, info=info@entry=0xffff270f6d80, ucVoid=0xffff270f6e00, abort_if_unrecognized=abort_if_unrecognized@entry=1)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> at /usr1/jenkins/BiShengJDK/open_source/openjdk/openjdk/hotspot/src/os_cpu/linux_aarch64/vm/os_linux_aarch64.cpp:410<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#5 0x0000ffff27aee3b0 in signalHandler (sig=<optimized out>, info=0xffff270f6d80, uc=<optimized out>)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> at /usr1/jenkins/BiShengJDK/open_source/openjdk/openjdk/hotspot/src/os/linux/vm/os_linux.cpp:4839<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#6 <signal handler called><o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#7 Klass::layout_helper (this=0x8b56b87d8) at /usr1/jenkins/BiShengJDK/open_source/openjdk/openjdk/hotspot/src/share/vm/oops/klass.hpp:577<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#8 Klass::oop_is_instance (this=0x8b56b87d8) at /usr1/jenkins/BiShengJDK/open_source/openjdk/openjdk/hotspot/src/share/vm/oops/klass.hpp:577<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#9 oopDesc::is_instance (this=<optimized out>) at /usr1/jenkins/BiShengJDK/open_source/openjdk/openjdk/hotspot/src/share/vm/oops/oop.inline.hpp:186<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#10 ServiceUtil::visible_oop (o=<optimized out>) at /usr1/jenkins/BiShengJDK/open_source/openjdk/openjdk/hotspot/src/share/vm/services/serviceUtil.hpp:47<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#11 JavaThreadBlockedOnMonitorEnterState::JavaThreadBlockedOnMonitorEnterState (obj_m=0xffff180114d8, java_thread=0xffff20029000, this=<synthetic pointer>)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> at /usr1/jenkins/BiShengJDK/open_source/openjdk/openjdk/hotspot/src/share/vm/services/threadService.hpp:552<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#12 ObjectMonitor::enter (this=0xffff180114d8, __the_thread__=__the_thread__@entry=0xffff20029000)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> at /usr1/jenkins/BiShengJDK/open_source/openjdk/openjdk/hotspot/src/share/vm/runtime/objectMonitor.cpp:390<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#13 0x0000ffff27c271dc in ObjectSynchronizer::slow_enter (__the_thread__=0xffff20029000, lock=0xffff270f8130, obj=...)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> at /usr1/jenkins/BiShengJDK/open_source/openjdk/openjdk/hotspot/src/share/vm/runtime/handles.hpp:79<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#14 ObjectSynchronizer::fast_enter (obj=..., lock=lock@entry=0xffff270f8130, attempt_rebias=attempt_rebias@entry=true, __the_thread__=__the_thread__@entry=0xffff20029000)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> at /usr1/jenkins/BiShengJDK/open_source/openjdk/openjdk/hotspot/src/share/vm/runtime/synchronizer.cpp:183<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#15 0x0000ffff27bb10b0 in SharedRuntime::complete_monitor_locking_C (_obj=0xffff21730000, lock=0xffff270f8130, thread=0xffff20029000)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> at /usr1/jenkins/BiShengJDK/open_source/openjdk/openjdk/hotspot/src/share/vm/runtime/sharedRuntime.cpp:1879<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#16 0x0000ffff256ffff8 in ?? ()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#17 0x0000ffff277a0414 in InstanceKlass::register_finalizer (i=<optimized out>, __the_thread__=0xfffeebc09d20)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> at /usr1/jenkins/BiShengJDK/open_source/openjdk/openjdk/hotspot/src/share/vm/utilities/growableArray.hpp:261<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#18 0x0000ffff277a0414 in InstanceKlass::register_finalizer (i=<optimized out>, __the_thread__=0xffff20029000)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> at /usr1/jenkins/BiShengJDK/open_source/openjdk/openjdk/hotspot/src/share/vm/utilities/growableArray.hpp:261<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#19 0x0000ffff270f8390 in ?? ()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#20 0x00000007ad622658 in ?? ()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Passing byte_map_base instead of oop to complete_monitor_locking_C:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">#15 0x0000ffff27bb10b0 in SharedRuntime::complete_monitor_locking_C (_obj=0xffff21730000, lock=0xffff270f8130, thread=0xffff20029000)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> at /usr1/jenkins/BiShengJDK/open_source/openjdk/openjdk/hotspot/src/share/vm/runtime/sharedRuntime.cpp:1879<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Called by complete_monitor_lock_Java:<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff256fffc0: nop<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff256fffc4: sub sp, sp, #0x10<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff256fffc8: stp x29, x30, [sp]<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff256fffcc: mov x9, sp<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff256fffd0: str x9, [x28, #592]<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff256fffd4: mov x0, x1<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff256fffd8: mov x1, x2<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff256fffdc: mov x2, x28<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff256fffe0: adr x9, 0xffff256ffff8<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff256fffe4: mov x8, #0xff0 // #4080<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff256fffe8: movk x8, #0x27bb, lsl #16<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff256fffec: movk x8, #0xffff, lsl #32<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff256ffff0: stp xzr, x9, [sp, #-16]!<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff256ffff4: blr x8<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff256ffff8: add sp, sp, #0x10<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff256ffffc: str xzr, [x28, #592]<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff25700000: str xzr, [x28, #600]<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff25700004: ldr x10, [x28, #8]<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff25700008: cbnz x10, 0xffff25700018<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff2570000c: ldp x29, x30, [sp]<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff25700010: add sp, sp, #0x10<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff25700014: ret<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff25700018: adrp x10, 0xffff25580000<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff2570001c: add x10, x10, #0x340<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff25700020: mov x12, xzr<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff25700024: ldp x29, x30, [sp]<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff25700028: add sp, sp, #0x10<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff2570002c: br x10<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Called by J 1821 C2 java.lang.ref.Finalizer.register(Ljava/lang/Object;)V (10 bytes) @ 0x0000ffff25caf0bc [0x0000ffff25caee80+0x23c]<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff25caf0b4: adrp x1, 0xffff21730000<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> 0xffff25caf0b8: bl 0xffff256fffc0<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Which encoding byte_map_base instead of the specific oop and passing it to complete_monitor_lock_Java.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">So the entire story is that the predicate rule of immByteMapBase caused an incorrect ConP match when a corresponding JNIHandleBlock with an oop was allocated to the address of byte_map_base by malloc.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">I have a simple fix that just remove the specialized match rule for immByteMapBase below, and crashes disappeared.<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">diff --git a/hotspot/src/cpu/aarch64/vm/aarch64.ad b/hotspot/src/cpu/aarch64/vm/aarch64.ad<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">index d73d5d457..5305467c1 100644<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">--- a/hotspot/src/cpu/aarch64/vm/aarch64.ad<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">+++ b/hotspot/src/cpu/aarch64/vm/aarch64.ad<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -3054,11 +3054,6 @@ encode %{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> assert(off == 0, "assumed offset == 0");<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> %}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">- enc_class aarch64_enc_mov_byte_map_base(iRegP dst, immByteMapBase src) %{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">- MacroAssembler _masm(&cbuf);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">- __ load_byte_map_base($dst$$Register);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">- %}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> enc_class aarch64_enc_mov_n(iRegN dst, immN src) %{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> MacroAssembler _masm(&cbuf);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> Register dst_reg = as_Register($dst$$reg);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -4311,19 +4306,6 @@ operand immPollPage()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> interface(CONST_INTER);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">%}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-// Card Table Byte Map Base<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-operand immByteMapBase()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-%{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">- // Get base of card map<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">- predicate((jbyte*)n->get_ptr() ==<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">- ((CardTableModRefBS*)(Universe::heap()->barrier_set()))->byte_map_base);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">- match(ConP);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">- op_cost(0);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">- format %{ %}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">- interface(CONST_INTER);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-%}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">// Pointer Immediate Minus One<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">// this is used when we want to write the current PC to the thread anchor<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">operand immP_M1()<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">@@ -6772,20 +6754,6 @@ instruct loadConPollPage(iRegPNoSp dst, immPollPage con)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"> ins_pipe(ialu_imm);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">%}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-// Load Byte Map Base Constant<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-instruct loadByteMapBase(iRegPNoSp dst, immByteMapBase con)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-%{<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">- match(Set dst con);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">- ins_cost(INSN_COST);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">- format %{ "adr $dst, $con\t# Byte Map Base" %}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">- ins_encode(aarch64_enc_mov_byte_map_base(dst, con));<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">- ins_pipe(ialu_imm);<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-%}<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">-<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">// Load Narrow Pointer Constant<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">instruct loadConN(iRegNNoSp dst, immN con)<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Does anyone have any suggestions on this?<o:p></o:p></span></p>
<p class="MsoNormal"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoNormal"><span lang="EN-US">Yadong<o:p></o:p></span></p>
</div>
</body>
</html>