Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(22)

Unified Diff: src/arm/code-stubs-arm.cc

Issue 6874007: Implement hardfloat calling convention in macro assembler and simulator. (Closed) Base URL: https://v8.googlecode.com/svn/branches/bleeding_edge
Patch Set: Minor edits. Created 9 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | src/arm/lithium-codegen-arm.cc » ('j') | src/arm/macro-assembler-arm.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/arm/code-stubs-arm.cc
diff --git a/src/arm/code-stubs-arm.cc b/src/arm/code-stubs-arm.cc
index edc2741849154e441bfdca03dc2cab313f6791b4..9a36b4a655a7c7b14ce077782f705cb759a508c5 100644
--- a/src/arm/code-stubs-arm.cc
+++ b/src/arm/code-stubs-arm.cc
@@ -831,13 +831,22 @@ void FloatingPointHelper::CallCCodeForDoubleOperation(
// through pop(pc) below.
__ push(lr);
__ PrepareCallCFunction(4, scratch); // Two doubles are 4 arguments.
Søren Thygesen Gjesse 2011/04/27 08:19:01 We should probably pass 0 instead of 4 here for ha
Karl Klose 2011/04/27 12:54:13 Changed to PrepareCallCFunction(0, 2, scratch).
+ if (FLAG_hardfloat) {
Søren Thygesen Gjesse 2011/04/27 08:19:01 As far as I can see CallCCodeForDoubleOperation is
Karl Klose 2011/04/27 12:54:13 It is used from the TRBO stub, also with VFP3.
+ __ vmov(d0, r0, r1);
+ __ vmov(d1, r2, r3);
+ }
// Call C routine that may not cause GC or other trouble.
__ CallCFunction(ExternalReference::double_fp_operation(op, masm->isolate()),
4);
// Store answer in the overwritable heap number. Double returned in
- // registers r0 and r1.
- __ Strd(r0, r1, FieldMemOperand(heap_number_result,
- HeapNumber::kValueOffset));
+ // registers r0 and r1 or in d0.
+ if (FLAG_hardfloat) {
+ __ vstr(d0,
+ FieldMemOperand(heap_number_result, HeapNumber::kValueOffset));
+ } else {
+ __ Strd(r0, r1, FieldMemOperand(heap_number_result,
+ HeapNumber::kValueOffset));
+ }
// Place heap_number_result in r0 and return to the pushed return address.
__ mov(r0, Operand(heap_number_result));
__ pop(pc);
@@ -1180,6 +1189,10 @@ static void EmitTwoNonNanDoubleComparison(MacroAssembler* masm,
// Call C routine that may not cause GC or other trouble.
__ push(lr);
__ PrepareCallCFunction(4, r5); // Two doubles count as 4 arguments.
+ if (FLAG_hardfloat) {
+ __ vmov(d0, r0, r1);
+ __ vmov(d1, r2, r3);
+ }
__ CallCFunction(ExternalReference::compare_doubles(masm->isolate()), 4);
__ pop(pc); // Return.
}
@@ -2829,7 +2842,11 @@ void TranscendentalCacheStub::GenerateCallCFunction(MacroAssembler* masm,
__ push(lr);
__ PrepareCallCFunction(2, scratch);
- __ vmov(r0, r1, d2);
+ if (FLAG_hardfloat) {
Søren Thygesen Gjesse 2011/04/27 08:19:01 I think we should consider changing the Transcende
+ __ vmov(d0, d2);
+ } else {
+ __ vmov(r0, r1, d2);
+ }
switch (type_) {
case TranscendentalCache::SIN:
__ CallCFunction(ExternalReference::math_sin_double_function(isolate), 2);
@@ -3056,8 +3073,7 @@ void MathPowStub::Generate(MacroAssembler* masm) {
&call_runtime);
__ push(lr);
__ PrepareCallCFunction(3, scratch);
- __ mov(r2, exponent);
- __ vmov(r0, r1, double_base);
+ __ SetCallCDoubleArguments(double_base, exponent);
__ CallCFunction(
ExternalReference::power_double_int_function(masm->isolate()), 3);
__ pop(lr);
@@ -3086,8 +3102,7 @@ void MathPowStub::Generate(MacroAssembler* masm) {
&call_runtime);
__ push(lr);
__ PrepareCallCFunction(4, scratch);
- __ vmov(r0, r1, double_base);
- __ vmov(r2, r3, double_exponent);
+ __ SetCallCDoubleArguments(double_base, double_exponent);
__ CallCFunction(
ExternalReference::power_double_double_function(masm->isolate()), 4);
__ pop(lr);
« no previous file with comments | « no previous file | src/arm/lithium-codegen-arm.cc » ('j') | src/arm/macro-assembler-arm.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698