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