
1: // rb_ia64_flushrs and rb_ia64_bsp is written in IA64 assembly language 2: // because Intel Compiler for IA64 doesn't support inline assembly. 3: // 4: // This file is based on following C program compiled by gcc. 5: // 6: // void rb_ia64_flushrs(void) { __builtin_ia64_flushrs(); } 7: // void *rb_ia64_bsp(void) { return __builtin_ia64_bsp(); } 8: // 9: // Note that rb_ia64_flushrs and rb_ia64_bsp works in its own stack frame. 10: // It's because BSP is updated by br.call/brl.call (not alloc instruction). 11: // So rb_ia64_flushrs flushes stack frames including caller's one. 12: // rb_ia64_bsp returns the address next to caller's register stack frame. 13: // 14: // See also 15: // Intel Itanium Architecture Software Developer's Manual 16: // Volume 2: System Architecture. 17: // 18: .file "ia64.c" 19: .text 20: .align 16 21: .global rb_ia64_flushrs# 22: .proc rb_ia64_flushrs# 23: rb_ia64_flushrs: 24: .prologue 25: .body 26: flushrs 27: ;; 28: nop.i 0 29: br.ret.sptk.many b0 30: .endp rb_ia64_flushrs# 31: .align 16 32: .global rb_ia64_bsp# 33: .proc rb_ia64_bsp# 34: rb_ia64_bsp: 35: .prologue 36: .body 37: nop.m 0 38: ;; 39: mov r8 = ar.bsp 40: br.ret.sptk.many b0 41: .endp rb_ia64_bsp# 42: .ident "GCC: (GNU) 3.3.5 (Debian 1:3.3.5-13)"