Re: [Xen-ia64-devel] [PATCH 2/12]MCA handler support for Xen/ia64 TAKE 2

2006-10-18 Thread SUZUKI Kazuhiro
Hi Alex,

  I attached updated patches for CONFIG_XEN_IA64_PERVCPU_VHPT
configuration.
  I modified to read the vhpt address from vcpu-arch.vhpt_maddr.

Thanks,
KAZ

Signed-off-by: Yutaka Ezaki [EMAIL PROTECTED]
Signed-off-by: Masaki Kanno [EMAIL PROTECTED]
Signed-off-by: Kazuhiro Suzuki [EMAIL PROTECTED]


From: Alex Williamson [EMAIL PROTECTED]
Subject: Re: [Xen-ia64-devel] [PATCH 2/12]MCA handler support for Xen/ia64 TAKE 
2
Date: Mon, 16 Oct 2006 16:38:38 -0600

 On Tue, 2006-10-10 at 20:02 +0900, SUZUKI Kazuhiro wrote:
 
  +#ifdef XEN
  +   // 5. VHPT
  +#if VHPT_ENABLED
  +   mov r24=VHPT_SIZE_LOG22
  +   movl r22=VHPT_ADDR
  +   mov r21=IA64_TR_VHPT
 ...
 
  +#ifdef XEN
  +   // 5. VHPT
  +#if VHPT_ENABLED
  +   mov r24=VHPT_SIZE_LOG22
  +   movl r22=VHPT_ADDR
 
 Hi Kaz,
 
VHPT_ADDR was just removed from the tree in this patch:
 
 http://xenbits.xensource.com/ext/xen-ia64-unstable.hg?cs=685586518b2e
 
 Can you send me a patch to apply on top of this one that removes
 VHPT_ADDR?  Thanks,
 
   Alex
 
 -- 
 Alex Williamson HP Open Source  Linux Org.
 
diff -r fcd746cf4647 xen/arch/ia64/linux-xen/mca_asm.S
--- a/xen/arch/ia64/linux-xen/mca_asm.S Sat Oct 14 18:10:08 2006 -0600
+++ b/xen/arch/ia64/linux-xen/mca_asm.S Wed Oct 18 14:57:07 2006 +0900
@@ -24,6 +24,9 @@
 #include asm/processor.h
 #include asm/mca_asm.h
 #include asm/mca.h
+#ifdef XEN
+#include asm/vhpt.h
+#endif
 
 /*
  * When we get a machine check, the kernel stack pointer is no longer
@@ -50,8 +53,7 @@
  */
 #ifdef XEN
 #define SAL_TO_OS_MCA_HANDOFF_STATE_SAVE(_tmp) \
-   movl_tmp=THIS_CPU(ia64_sal_to_os_handoff_state_addr);;  \
-   tpa _tmp=_tmp;; \
+   GET_THIS_PADDR(_tmp, ia64_sal_to_os_handoff_state_addr);;   \
ld8 _tmp=[_tmp];;   \
st8 [_tmp]=r1,0x08;;\
st8 [_tmp]=r8,0x08;;\
@@ -72,6 +74,7 @@
st8 [_tmp]=r12,0x08;;   \
st8 [_tmp]=r17,0x08;;   \
st8 [_tmp]=r18,0x08
+#endif /* XEN */
 
 /*
  * OS_MCA_TO_SAL_HANDOFF_STATE (SAL 3.0 spec)
@@ -101,6 +104,24 @@
  * imots_sal_check_ra=Return address to location within SAL_CHECK
  *
  */
+#ifdef XEN
+#define COLD_BOOT_HANDOFF_STATE(sal_to_os_handoff,os_to_sal_handoff,tmp)\
+   movltmp=IA64_MCA_COLD_BOOT; \
+   GET_THIS_PADDR(r2,ia64_sal_to_os_handoff_state_addr);;  \
+   ld8 sal_to_os_handoff=[sal_to_os_handoff];; \
+   movlos_to_sal_handoff=ia64_os_to_sal_handoff_state;;\
+   dep os_to_sal_handoff = 0, os_to_sal_handoff, 60, 4;;   \
+   /*DATA_VA_TO_PA(os_to_sal_handoff);;*/  \
+   st8 [os_to_sal_handoff]=tmp,8;; \
+   ld8 tmp=[sal_to_os_handoff],48;;\
+   st8 [os_to_sal_handoff]=tmp,8;; \
+   movltmp=IA64_MCA_SAME_CONTEXT;; \
+   st8 [os_to_sal_handoff]=tmp,8;; \
+   ld8 tmp=[sal_to_os_handoff],-8;;\
+   st8 [os_to_sal_handoff]=tmp,8;; \
+   ld8 tmp=[sal_to_os_handoff];;   \
+   st8 [os_to_sal_handoff]=tmp;;
+#else  /* XEN */
 #define COLD_BOOT_HANDOFF_STATE(sal_to_os_handoff,os_to_sal_handoff,tmp)\
movltmp=IA64_MCA_COLD_BOOT; \
movlsal_to_os_handoff=__pa(ia64_sal_to_os_handoff_state);   \
@@ -114,13 +135,13 @@
st8 [os_to_sal_handoff]=tmp,8;; \
ld8 tmp=[sal_to_os_handoff];;   \
st8 [os_to_sal_handoff]=tmp;;
+#endif /* XEN */
 
 #define GET_IA64_MCA_DATA(reg) \
GET_THIS_PADDR(reg, ia64_mca_data)  \
;;  \
ld8 reg=[reg]
 
-#endif /* XEN */
.global ia64_os_mca_dispatch
.global ia64_os_mca_dispatch_end
 #ifndef XEN
@@ -132,7 +153,40 @@
.text
.align 16
 
-#ifndef XEN
+#ifdef XEN
+/*
+ * void set_per_cpu_data(void)
+ * {
+ *   int i;
+ *   for (i = 0; i  64; i++) {
+ * if (ia64_mca_tlb_list[i].cr_lid == ia64_getreg(_IA64_REG_CR_LID)) {
+ *   ia64_set_kr(IA64_KR_PER_CPU_DATA, ia64_mca_tlb_list[i].percpu_paddr);
+ *   return;
+ * }
+ *   }
+ *   while(1); // Endless loop on error
+ * }
+ */
+#defineSET_PER_CPU_DATA()  \
+   LOAD_PHYSICAL(p0,r2,ia64_mca_tlb_list);;\
+   mov r7 = r0;\
+   mov r6 = r0

Re: [Xen-ia64-devel] [PATCH 2/12]MCA handler support for Xen/ia64 TAKE 2

2006-10-16 Thread Alex Williamson
On Tue, 2006-10-10 at 20:02 +0900, SUZUKI Kazuhiro wrote:

 +#ifdef XEN
 + // 5. VHPT
 +#if VHPT_ENABLED
 + mov r24=VHPT_SIZE_LOG22
 + movl r22=VHPT_ADDR
 + mov r21=IA64_TR_VHPT
...

 +#ifdef XEN
 + // 5. VHPT
 +#if VHPT_ENABLED
 + mov r24=VHPT_SIZE_LOG22
 + movl r22=VHPT_ADDR

Hi Kaz,

   VHPT_ADDR was just removed from the tree in this patch:

http://xenbits.xensource.com/ext/xen-ia64-unstable.hg?cs=685586518b2e

Can you send me a patch to apply on top of this one that removes
VHPT_ADDR?  Thanks,

Alex

-- 
Alex Williamson HP Open Source  Linux Org.


___
Xen-ia64-devel mailing list
Xen-ia64-devel@lists.xensource.com
http://lists.xensource.com/xen-ia64-devel


Re: [Xen-ia64-devel] [PATCH 2/12]MCA handler support for Xen/ia64 TAKE 2

2006-10-10 Thread SUZUKI Kazuhiro
Hi Alex,

  I removed the /* XEN */ close to #ifdef/#ifndef as well as mca.c


Thanks,
KAZ

Signed-off-by: Yutaka Ezaki [EMAIL PROTECTED]
Signed-off-by: Masaki Kanno [EMAIL PROTECTED]
Signed-off-by: Kazuhiro Suzuki [EMAIL PROTECTED]
diff -r 1a0b58e7b5de xen/arch/ia64/linux-xen/mca_asm.S
--- a/xen/arch/ia64/linux-xen/mca_asm.S Thu Oct 05 12:25:53 2006 -0600
+++ b/xen/arch/ia64/linux-xen/mca_asm.S Fri Oct 06 09:41:40 2006 +0900
@@ -24,6 +24,9 @@
 #include asm/processor.h
 #include asm/mca_asm.h
 #include asm/mca.h
+#ifdef XEN
+#include asm/vhpt.h
+#endif
 
 /*
  * When we get a machine check, the kernel stack pointer is no longer
@@ -50,8 +53,7 @@
  */
 #ifdef XEN
 #define SAL_TO_OS_MCA_HANDOFF_STATE_SAVE(_tmp) \
-   movl_tmp=THIS_CPU(ia64_sal_to_os_handoff_state_addr);;  \
-   tpa _tmp=_tmp;; \
+   GET_THIS_PADDR(_tmp, ia64_sal_to_os_handoff_state_addr);;   \
ld8 _tmp=[_tmp];;   \
st8 [_tmp]=r1,0x08;;\
st8 [_tmp]=r8,0x08;;\
@@ -72,6 +74,7 @@
st8 [_tmp]=r12,0x08;;   \
st8 [_tmp]=r17,0x08;;   \
st8 [_tmp]=r18,0x08
+#endif /* XEN */
 
 /*
  * OS_MCA_TO_SAL_HANDOFF_STATE (SAL 3.0 spec)
@@ -101,6 +104,24 @@
  * imots_sal_check_ra=Return address to location within SAL_CHECK
  *
  */
+#ifdef XEN
+#define COLD_BOOT_HANDOFF_STATE(sal_to_os_handoff,os_to_sal_handoff,tmp)\
+   movltmp=IA64_MCA_COLD_BOOT; \
+   GET_THIS_PADDR(r2,ia64_sal_to_os_handoff_state_addr);;  \
+   ld8 sal_to_os_handoff=[sal_to_os_handoff];; \
+   movlos_to_sal_handoff=ia64_os_to_sal_handoff_state;;\
+   dep os_to_sal_handoff = 0, os_to_sal_handoff, 60, 4;;   \
+   /*DATA_VA_TO_PA(os_to_sal_handoff);;*/  \
+   st8 [os_to_sal_handoff]=tmp,8;; \
+   ld8 tmp=[sal_to_os_handoff],48;;\
+   st8 [os_to_sal_handoff]=tmp,8;; \
+   movltmp=IA64_MCA_SAME_CONTEXT;; \
+   st8 [os_to_sal_handoff]=tmp,8;; \
+   ld8 tmp=[sal_to_os_handoff],-8;;\
+   st8 [os_to_sal_handoff]=tmp,8;; \
+   ld8 tmp=[sal_to_os_handoff];;   \
+   st8 [os_to_sal_handoff]=tmp;;
+#else  /* XEN */
 #define COLD_BOOT_HANDOFF_STATE(sal_to_os_handoff,os_to_sal_handoff,tmp)\
movltmp=IA64_MCA_COLD_BOOT; \
movlsal_to_os_handoff=__pa(ia64_sal_to_os_handoff_state);   \
@@ -114,13 +135,13 @@
st8 [os_to_sal_handoff]=tmp,8;; \
ld8 tmp=[sal_to_os_handoff];;   \
st8 [os_to_sal_handoff]=tmp;;
+#endif /* XEN */
 
 #define GET_IA64_MCA_DATA(reg) \
GET_THIS_PADDR(reg, ia64_mca_data)  \
;;  \
ld8 reg=[reg]
 
-#endif /* XEN */
.global ia64_os_mca_dispatch
.global ia64_os_mca_dispatch_end
 #ifndef XEN
@@ -132,7 +153,40 @@
.text
.align 16
 
-#ifndef XEN
+#ifdef XEN
+/*
+ * void set_per_cpu_data(void)
+ * {
+ *   int i;
+ *   for (i = 0; i  64; i++) {
+ * if (ia64_mca_tlb_list[i].cr_lid == ia64_getreg(_IA64_REG_CR_LID)) {
+ *   ia64_set_kr(IA64_KR_PER_CPU_DATA, ia64_mca_tlb_list[i].percpu_paddr);
+ *   return;
+ * }
+ *   }
+ *   while(1); // Endless loop on error
+ * }
+ */
+#defineSET_PER_CPU_DATA()  \
+   LOAD_PHYSICAL(p0,r2,ia64_mca_tlb_list);;\
+   mov r7 = r0;\
+   mov r6 = r0;;   \
+   adds r3 = IA64_MCA_PERCPU_OFFSET, r2;   \
+1: add r4 = r6, r2;\
+   mov r5=cr.lid;; \
+   adds r7 = 1, r7;\
+   ld8 r4 = [r4];; \
+   cmp.ne p6, p7 = r5, r4; \
+   cmp4.lt p8, p9 = NR_CPUS-1, r7; \
+(p7)   br.cond.dpnt 3f;\
+   adds r6 = 16, r6;   \
+(p9)   br.cond.sptk 1b;\
+2: br 2b;; /* Endless loop on error */ \
+3: add r4 = r6, r3;;   \
+   ld8 r4 = [r4];; \
+   mov 

Re: [Xen-ia64-devel] [PATCH 2/12]MCA handler support for Xen/ia64 TAKE 2

2006-09-28 Thread SUZUKI Kazuhiro
Hi Alex,

 On Fri, 2006-09-22 at 19:32 +0900, SUZUKI Kazuhiro wrote:
  [2/12]  Add percpu data physical addr mca_asm.S [mca-mca_asm.patch]
  
 
  @@ -221,6 +275,17 @@ 4:
  ;;
  srlz.i
  ;;
  +   // 5. VHPT
  +#if VHPT_ENABLED
  +   mov r24=VHPT_SIZE_LOG22
  +   movl r22=VHPT_ADDR
  +   mov r21=IA64_TR_VHPT
  +   ;;
  +   ptr.d   r22,r24
  +   ;;
  +   srlz.d
  +   ;;
  +#endif
 
Does this need to be inside a #ifdef XEN?  
 
  @@ -342,6 +422,26 @@ ia64_reload_tr:
  ;;
  srlz.d
  ;;
  +   // 5. VHPT
  +#if VHPT_ENABLED
  +   mov r24=VHPT_SIZE_LOG22
  +   movl r22=VHPT_ADDR
  +   mov r21=IA64_TR_VHPT
  +   movl r26=PAGE_KERNEL
  +   ;;
  +   GET_THIS_PADDR(r2, vhpt_paddr)
  +   ;; 
  +   ld8 r18=[r2]
  +   ;; 
  +   or r23=r18,r26  // construct PA | page properties
  +   mov cr.itir=r24
  +   mov cr.ifa=r22
  +   ;;
  +   itr.d dtr[r21]=r23  // wire in new mapping...
  +   ;;
  +   srlz.d
  +   ;;
  +#endif
 
Same question on this one.  Thanks,

  Yes. I forgot to enclose them with #ifdef XEN.

Thanks,
KAZ

Signed-off-by: Yutaka Ezaki [EMAIL PROTECTED]
Signed-off-by: Masaki Kanno [EMAIL PROTECTED]
Signed-off-by: Kazuhiro Suzuki [EMAIL PROTECTED]
diff -r 3e4fa8b5b245 xen/arch/ia64/linux-xen/mca_asm.S
--- a/xen/arch/ia64/linux-xen/mca_asm.S Tue Sep 12 11:43:22 2006 -0600
+++ b/xen/arch/ia64/linux-xen/mca_asm.S Tue Sep 26 10:11:07 2006 +0900
@@ -24,6 +24,9 @@
 #include asm/processor.h
 #include asm/mca_asm.h
 #include asm/mca.h
+#ifdef XEN
+#include asm/vhpt.h
+#endif /* XEN */
 
 /*
  * When we get a machine check, the kernel stack pointer is no longer
@@ -50,8 +53,7 @@
  */
 #ifdef XEN
 #define SAL_TO_OS_MCA_HANDOFF_STATE_SAVE(_tmp) \
-   movl_tmp=THIS_CPU(ia64_sal_to_os_handoff_state_addr);;  \
-   tpa _tmp=_tmp;; \
+   GET_THIS_PADDR(_tmp, ia64_sal_to_os_handoff_state_addr);;   \
ld8 _tmp=[_tmp];;   \
st8 [_tmp]=r1,0x08;;\
st8 [_tmp]=r8,0x08;;\
@@ -72,6 +74,7 @@
st8 [_tmp]=r12,0x08;;   \
st8 [_tmp]=r17,0x08;;   \
st8 [_tmp]=r18,0x08
+#endif /* XEN */
 
 /*
  * OS_MCA_TO_SAL_HANDOFF_STATE (SAL 3.0 spec)
@@ -101,6 +104,24 @@
  * imots_sal_check_ra=Return address to location within SAL_CHECK
  *
  */
+#ifdef XEN
+#define COLD_BOOT_HANDOFF_STATE(sal_to_os_handoff,os_to_sal_handoff,tmp)\
+   movltmp=IA64_MCA_COLD_BOOT; \
+   GET_THIS_PADDR(r2,ia64_sal_to_os_handoff_state_addr);;  \
+   ld8 sal_to_os_handoff=[sal_to_os_handoff];; \
+   movlos_to_sal_handoff=ia64_os_to_sal_handoff_state;;\
+   dep os_to_sal_handoff = 0, os_to_sal_handoff, 60, 4;;   \
+   /*DATA_VA_TO_PA(os_to_sal_handoff);;*/  \
+   st8 [os_to_sal_handoff]=tmp,8;; \
+   ld8 tmp=[sal_to_os_handoff],48;;\
+   st8 [os_to_sal_handoff]=tmp,8;; \
+   movltmp=IA64_MCA_SAME_CONTEXT;; \
+   st8 [os_to_sal_handoff]=tmp,8;; \
+   ld8 tmp=[sal_to_os_handoff],-8;;\
+   st8 [os_to_sal_handoff]=tmp,8;; \
+   ld8 tmp=[sal_to_os_handoff];;   \
+   st8 [os_to_sal_handoff]=tmp;;
+#else  /* XEN */
 #define COLD_BOOT_HANDOFF_STATE(sal_to_os_handoff,os_to_sal_handoff,tmp)\
movltmp=IA64_MCA_COLD_BOOT; \
movlsal_to_os_handoff=__pa(ia64_sal_to_os_handoff_state);   \
@@ -114,13 +135,13 @@
st8 [os_to_sal_handoff]=tmp,8;; \
ld8 tmp=[sal_to_os_handoff];;   \
st8 [os_to_sal_handoff]=tmp;;
+#endif /* XEN */
 
 #define GET_IA64_MCA_DATA(reg) \
GET_THIS_PADDR(reg, ia64_mca_data)  \
;;  \
ld8 reg=[reg]
 
-#endif /* XEN */
.global ia64_os_mca_dispatch
.global ia64_os_mca_dispatch_end
 #ifndef XEN
@@ -132,7 +153,40 @@
.text
.align 16
 
-#ifndef XEN
+#ifdef XEN
+/*
+ * void set_per_cpu_data(void)
+ * {
+ *   int i;
+ *   for (i = 0; i  64; i++) {
+ * if (ia64_mca_tlb_list[i].cr_lid == ia64_getreg(_IA64_REG_CR_LID)) {
+ *   ia64_set_kr(IA64_KR_PER_CPU_DATA, ia64_mca_tlb_list[i].percpu_paddr);
+ *   return;
+ * }
+ *   }
+ *   while(1); // Endless loop on error
+ * }
+ */
+#defineSET_PER_CPU_DATA()  \
+   LOAD_PHYSICAL(p0,r2,ia64_mca_tlb_list);;\
+   

[Xen-ia64-devel] [PATCH 2/12]MCA handler support for Xen/ia64 TAKE 2

2006-09-22 Thread SUZUKI Kazuhiro
[2/12]  Add percpu data physical addr mca_asm.S [mca-mca_asm.patch]

Signed-off-by: Yutaka Ezaki [EMAIL PROTECTED]
Signed-off-by: Masaki Kanno [EMAIL PROTECTED]
Signed-off-by: Kazuhiro Suzuki [EMAIL PROTECTED]
diff -r 3e4fa8b5b245 xen/arch/ia64/linux-xen/mca_asm.S
--- a/xen/arch/ia64/linux-xen/mca_asm.S Tue Sep 12 11:43:22 2006 -0600
+++ b/xen/arch/ia64/linux-xen/mca_asm.S Fri Sep 22 09:26:49 2006 +0900
@@ -24,6 +24,9 @@
 #include asm/processor.h
 #include asm/mca_asm.h
 #include asm/mca.h
+#ifdef XEN
+#include asm/vhpt.h
+#endif /* XEN */
 
 /*
  * When we get a machine check, the kernel stack pointer is no longer
@@ -50,8 +53,7 @@
  */
 #ifdef XEN
 #define SAL_TO_OS_MCA_HANDOFF_STATE_SAVE(_tmp) \
-   movl_tmp=THIS_CPU(ia64_sal_to_os_handoff_state_addr);;  \
-   tpa _tmp=_tmp;; \
+   GET_THIS_PADDR(_tmp, ia64_sal_to_os_handoff_state_addr);;   \
ld8 _tmp=[_tmp];;   \
st8 [_tmp]=r1,0x08;;\
st8 [_tmp]=r8,0x08;;\
@@ -72,6 +74,7 @@
st8 [_tmp]=r12,0x08;;   \
st8 [_tmp]=r17,0x08;;   \
st8 [_tmp]=r18,0x08
+#endif /* XEN */
 
 /*
  * OS_MCA_TO_SAL_HANDOFF_STATE (SAL 3.0 spec)
@@ -101,6 +104,24 @@
  * imots_sal_check_ra=Return address to location within SAL_CHECK
  *
  */
+#ifdef XEN
+#define COLD_BOOT_HANDOFF_STATE(sal_to_os_handoff,os_to_sal_handoff,tmp)\
+   movltmp=IA64_MCA_COLD_BOOT; \
+   GET_THIS_PADDR(r2,ia64_sal_to_os_handoff_state_addr);;  \
+   ld8 sal_to_os_handoff=[sal_to_os_handoff];; \
+   movlos_to_sal_handoff=ia64_os_to_sal_handoff_state;;\
+   dep os_to_sal_handoff = 0, os_to_sal_handoff, 60, 4;;   \
+   /*DATA_VA_TO_PA(os_to_sal_handoff);;*/  \
+   st8 [os_to_sal_handoff]=tmp,8;; \
+   ld8 tmp=[sal_to_os_handoff],48;;\
+   st8 [os_to_sal_handoff]=tmp,8;; \
+   movltmp=IA64_MCA_SAME_CONTEXT;; \
+   st8 [os_to_sal_handoff]=tmp,8;; \
+   ld8 tmp=[sal_to_os_handoff],-8;;\
+   st8 [os_to_sal_handoff]=tmp,8;; \
+   ld8 tmp=[sal_to_os_handoff];;   \
+   st8 [os_to_sal_handoff]=tmp;;
+#else  /* XEN */
 #define COLD_BOOT_HANDOFF_STATE(sal_to_os_handoff,os_to_sal_handoff,tmp)\
movltmp=IA64_MCA_COLD_BOOT; \
movlsal_to_os_handoff=__pa(ia64_sal_to_os_handoff_state);   \
@@ -114,13 +135,13 @@
st8 [os_to_sal_handoff]=tmp,8;; \
ld8 tmp=[sal_to_os_handoff];;   \
st8 [os_to_sal_handoff]=tmp;;
+#endif /* XEN */
 
 #define GET_IA64_MCA_DATA(reg) \
GET_THIS_PADDR(reg, ia64_mca_data)  \
;;  \
ld8 reg=[reg]
 
-#endif /* XEN */
.global ia64_os_mca_dispatch
.global ia64_os_mca_dispatch_end
 #ifndef XEN
@@ -132,7 +153,40 @@
.text
.align 16
 
-#ifndef XEN
+#ifdef XEN
+/*
+ * void set_per_cpu_data(void)
+ * {
+ *   int i;
+ *   for (i = 0; i  64; i++) {
+ * if (ia64_mca_tlb_list[i].cr_lid == ia64_getreg(_IA64_REG_CR_LID)) {
+ *   ia64_set_kr(IA64_KR_PER_CPU_DATA, ia64_mca_tlb_list[i].percpu_paddr);
+ *   return;
+ * }
+ *   }
+ *   while(1); // Endless loop on error
+ * }
+ */
+#defineSET_PER_CPU_DATA()  \
+   LOAD_PHYSICAL(p0,r2,ia64_mca_tlb_list);;\
+   mov r7 = r0;\
+   mov r6 = r0;;   \
+   adds r3 = IA64_MCA_PERCPU_OFFSET, r2;   \
+1: add r4 = r6, r2;\
+   mov r5=cr.lid;; \
+   adds r7 = 1, r7;\
+   ld8 r4 = [r4];; \
+   cmp.ne p6, p7 = r5, r4; \
+   cmp4.lt p8, p9 = NR_CPUS-1, r7; \
+(p7)   br.cond.dpnt 3f;\
+   adds r6 = 16, r6;   \
+(p9)   br.cond.sptk 1b;\
+2: br 2b;; /* Endless loop on error*/  \
+3: add r4 = r6, r3;;   \
+   ld8 r4 = [r4];; \
+   mov ar.k3=r4
+#endif