(Logical change 1.68)
diff --git a/src/ia64/global-asm-ia64.S b/src/ia64/global-asm-ia64.S
index e69de29..9224173 100644
--- a/src/ia64/global-asm-ia64.S
+++ b/src/ia64/global-asm-ia64.S
@@ -0,0 +1,22 @@
+#ifndef UNW_REMOTE_ONLY
+
+/*
+ * Create a special unwind-table entry which makes it easy for an
+ * unwinder to locate the dynamic registration list.  The special
+ * entry covers address range [0-0) and is therefore guaranteed to be
+ * the first in the unwind-table.
+ */
+	.global _U_dyn_info_list
+	.hidden _U_dyn_info_list
+
+	.section .IA_64.unwind_info,"a","progbits"
+.info:	data8 (1<<48) | 1	/* v1, length==1 (8-byte word) */
+	data8 0		/* 8 empty .prologue directives (nops) */
+	data8 0		/* personality routine (ignored) */
+	string "dyn-list"	/* lsda */
+	data8 @gprel(_U_dyn_info_list)
+	.previous
+	.section .IA_64.unwind, "a", "progbits"
+	data8 0, 0, @segrel(.info)
+
+#endif
diff --git a/tests/flush-cache.S b/tests/flush-cache.S
index e69de29..470d762 100644
--- a/tests/flush-cache.S
+++ b/tests/flush-cache.S
@@ -0,0 +1,33 @@
+#ifdef __ia64__
+
+	.global flush_cache
+
+	.proc flush_cache
+flush_cache:
+	.prologue
+        alloc r2=ar.pfs,2,0,0,0
+	add r8=31,in1			// round up to 32 byte-boundary
+        ;;
+        shr.u r8=r8,5                   // we flush 32 bytes per iteration
+	;;
+	add r8=-1,r8
+        .save ar.lc, r3
+        mov r3=ar.lc                    // save ar.lc
+        ;;
+        .body
+
+        mov ar.lc=r8
+        ;;
+.loop:  fc in0                          // issuable on M0 only
+        add in0=32,in0
+        br.cloop.sptk.few .loop
+        ;;
+        sync.i
+        ;;
+        srlz.i
+        ;;
+        mov ar.lc=r3                    // restore ar.lc
+        br.ret.sptk.many rp
+	.endp flush_cache
+
+#endif