(linenum→info "unix/slp.c:2238")

ruby/1.9.0/ia64.s

    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)"
Syntax (Markdown)