mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* configure.in: define IA64 for portability. (HP aC++/ANSI C doesn't
define __ia64__.) don't check libunwind stuff. check __libc_ia64_register_backing_store_base. * defines.h: declare rb_ia64_bsp and rb_ia64_flushrs. (flush_register_windows): call rb_ia64_flushrs on IA64. * ia64.s: new file for IA64. it is separated from C program files because Intel C++ Compiler for IA64 doesn't support inline assembly. * common.mk (ia64.$(OBJEXT)): new target. * ruby.h (RUBY_INIT_STACK): defined. (ruby_init_stack): declared for RUBY_INIT_STACK. * main.c (main): precedes RUBY_INIT_STACK before ruby_init. * gc.c (rb_gc_register_stack_start): new global variable on IA64. (garbage_collect): simplify register stack marking code. don't use libunwind. (Init_stack): initialize rb_gc_register_stack_start. (ruby_init_stack): new function for RUBY_INIT_STACK. * eval.c (struct thread): add bstr_pos member for original position of register stack. (rb_thread_save_context): simplify register stack saving code. don't use libunwind. (rb_thread_restore_context_0): new function. moved from rb_thread_restore_context except the stack position checking code. don't use libunwind for IA64 register stack. (register_stack_extend): new function. (stack_extend): make it self-recursive with the stack position checking code in old rb_thread_restore_context. (rb_thread_restore_context): just call stack_extend. (flush_register_windows): removed. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@9745 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
baf0ba4588
commit
f59bd226b3
10 changed files with 262 additions and 158 deletions
34
ia64.s
Normal file
34
ia64.s
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
// 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(); }
|
||||
//
|
||||
.file "ia64.c"
|
||||
.pred.safe_across_calls p1-p5,p16-p63
|
||||
.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)"
|
||||
Loading…
Add table
Add a link
Reference in a new issue