91 address os::current_stack_pointer() { |
91 address os::current_stack_pointer() { |
92 #ifdef SPARC_WORKS |
92 #ifdef SPARC_WORKS |
93 register void *esp; |
93 register void *esp; |
94 __asm__("mov %%"SPELL_REG_SP", %0":"=r"(esp)); |
94 __asm__("mov %%"SPELL_REG_SP", %0":"=r"(esp)); |
95 return (address) ((char*)esp + sizeof(long)*2); |
95 return (address) ((char*)esp + sizeof(long)*2); |
|
96 #elif defined(__clang__) |
|
97 intptr_t* esp; |
|
98 __asm__ __volatile__ ("mov %%"SPELL_REG_SP", %0":"=r"(esp):); |
|
99 return (address) esp; |
96 #else |
100 #else |
97 register void *esp __asm__ (SPELL_REG_SP); |
101 register void *esp __asm__ (SPELL_REG_SP); |
98 return (address) esp; |
102 return (address) esp; |
99 #endif |
103 #endif |
100 } |
104 } |
173 |
177 |
174 intptr_t* _get_previous_fp() { |
178 intptr_t* _get_previous_fp() { |
175 #ifdef SPARC_WORKS |
179 #ifdef SPARC_WORKS |
176 register intptr_t **ebp; |
180 register intptr_t **ebp; |
177 __asm__("mov %%"SPELL_REG_FP", %0":"=r"(ebp)); |
181 __asm__("mov %%"SPELL_REG_FP", %0":"=r"(ebp)); |
|
182 #elif defined(__clang__) |
|
183 intptr_t **ebp; |
|
184 __asm__ __volatile__ ("mov %%"SPELL_REG_FP", %0":"=r"(ebp):); |
178 #else |
185 #else |
179 register intptr_t **ebp __asm__ (SPELL_REG_FP); |
186 register intptr_t **ebp __asm__ (SPELL_REG_FP); |
180 #endif |
187 #endif |
181 return (intptr_t*) *ebp; // we want what it points to. |
188 return (intptr_t*) *ebp; // we want what it points to. |
182 } |
189 } |