summaryrefslogtreecommitdiffstats
path: root/clang/lib/Sema/SemaTemplate.cpp
diff options
context:
space:
mode:
authorHal Finkel <hfinkel@anl.gov>2013-07-17 23:50:51 +0000
committerHal Finkel <hfinkel@anl.gov>2013-07-17 23:50:51 +0000
commitf05d6c784373c30740eda1fb0f1ce5e6790e7f35 (patch)
tree5ee848324f4c94eaf8fa54535753431a1afcdcfd /clang/lib/Sema/SemaTemplate.cpp
parent7ab2c3ecb22ca33bd68a69c0a1b4ac4826a7a0d8 (diff)
downloadbcm5719-llvm-f05d6c784373c30740eda1fb0f1ce5e6790e7f35.tar.gz
bcm5719-llvm-f05d6c784373c30740eda1fb0f1ce5e6790e7f35.zip
PPC: Add base-pointer support to builtin setjmp/longjmp
First, this changes the base-pointer implementation to remove an unnecessary complication (and one that is incompatible with how builtin SjLj is implemented): instead of using r31 as the base pointer when it is not needed as a frame pointer, now the base pointer will always be r30 when needed. Second, we introduce another pseudo register, BP, which is used just like the FP pseudo register to refer to the base register before we know for certain what register it will be. Third, we now save BP into the jmp_buf, and restore r30 from that slot in longjmp. If the function that called setjmp did not use a base pointer, then r30 will be overwritten by the setjmp-calling-function's restore code. FP restoration (which is restored into r31) works the same way. llvm-svn: 186545
Diffstat (limited to 'clang/lib/Sema/SemaTemplate.cpp')
0 files changed, 0 insertions, 0 deletions
OpenPOWER on IntegriCloud