Floating point callee save support in exception delivery.
Untested until we promote floating point values in the compiler.
Change-Id: I20fe66cb59e2f31b21043479dde898326aec668f
diff --git a/src/runtime.cc b/src/runtime.cc
index 42bf874..e1950f3 100644
--- a/src/runtime.cc
+++ b/src/runtime.cc
@@ -581,8 +581,9 @@
method->SetSignature(intern_table_->InternStrong("()V"));
method->SetCode(NULL, insns, NULL);
if ((insns == kThumb2) || (insns == kArm)) {
- method->SetFrameSizeInBytes(64);
- method->SetReturnPcOffsetInBytes(60);
+ size_t frame_size = (12 /* gprs */ + 32 /* fprs */ + 4 /* data */) * kPointerSize;
+ method->SetFrameSizeInBytes(frame_size);
+ method->SetReturnPcOffsetInBytes(frame_size - kPointerSize);
method->SetCoreSpillMask((1 << art::arm::R1) |
(1 << art::arm::R2) |
(1 << art::arm::R3) |
@@ -595,7 +596,38 @@
(1 << art::arm::R10) |
(1 << art::arm::R11) |
(1 << art::arm::LR));
- method->SetFpSpillMask(0);
+ method->SetFpSpillMask((1 << art::arm::S0) |
+ (1 << art::arm::S1) |
+ (1 << art::arm::S2) |
+ (1 << art::arm::S3) |
+ (1 << art::arm::S4) |
+ (1 << art::arm::S5) |
+ (1 << art::arm::S6) |
+ (1 << art::arm::S7) |
+ (1 << art::arm::S8) |
+ (1 << art::arm::S9) |
+ (1 << art::arm::S10) |
+ (1 << art::arm::S11) |
+ (1 << art::arm::S12) |
+ (1 << art::arm::S13) |
+ (1 << art::arm::S14) |
+ (1 << art::arm::S15) |
+ (1 << art::arm::S16) |
+ (1 << art::arm::S17) |
+ (1 << art::arm::S18) |
+ (1 << art::arm::S19) |
+ (1 << art::arm::S20) |
+ (1 << art::arm::S21) |
+ (1 << art::arm::S22) |
+ (1 << art::arm::S23) |
+ (1 << art::arm::S24) |
+ (1 << art::arm::S25) |
+ (1 << art::arm::S26) |
+ (1 << art::arm::S27) |
+ (1 << art::arm::S28) |
+ (1 << art::arm::S29) |
+ (1 << art::arm::S30) |
+ (1 << art::arm::S31));
} else if (insns == kX86) {
method->SetFrameSizeInBytes(32);
method->SetReturnPcOffsetInBytes(28);