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

Side by Side Diff: src/a64/macro-assembler-a64.h

Issue 146883002: A64: Preserve/restore the FP registers in the exit frame when required. (Closed) Base URL: https://v8.googlecode.com/svn/branches/experimental/a64
Patch Set: Created 6 years, 11 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « src/a64/frames-a64.h ('k') | src/a64/macro-assembler-a64.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 the V8 project authors. All rights reserved. 1 // Copyright 2013 the V8 project authors. All rights reserved.
2 // Redistribution and use in source and binary forms, with or without 2 // Redistribution and use in source and binary forms, with or without
3 // modification, are permitted provided that the following conditions are 3 // modification, are permitted provided that the following conditions are
4 // met: 4 // met:
5 // 5 //
6 // * Redistributions of source code must retain the above copyright 6 // * Redistributions of source code must retain the above copyright
7 // notice, this list of conditions and the following disclaimer. 7 // notice, this list of conditions and the following disclaimer.
8 // * Redistributions in binary form must reproduce the above 8 // * Redistributions in binary form must reproduce the above
9 // copyright notice, this list of conditions and the following 9 // copyright notice, this list of conditions and the following
10 // disclaimer in the documentation and/or other materials provided 10 // disclaimer in the documentation and/or other materials provided
(...skipping 1475 matching lines...) Expand 10 before | Expand all | Expand 10 after
1486 // AllocationSiteInfo support. Arrays may have an associated 1486 // AllocationSiteInfo support. Arrays may have an associated
1487 // AllocationSiteInfo object that can be checked for in order to pretransition 1487 // AllocationSiteInfo object that can be checked for in order to pretransition
1488 // to another type. 1488 // to another type.
1489 // On entry, receiver should point to the array object. 1489 // On entry, receiver should point to the array object.
1490 // If allocation info is present, the Z flag is set (so that the eq 1490 // If allocation info is present, the Z flag is set (so that the eq
1491 // condition will pass). 1491 // condition will pass).
1492 void TestJSArrayForAllocationSiteInfo(Register receiver, 1492 void TestJSArrayForAllocationSiteInfo(Register receiver,
1493 Register scratch1, 1493 Register scratch1,
1494 Register scratch2); 1494 Register scratch2);
1495 1495
1496 // The stack pointer has to switch between csp and jssp when setting up and
1497 // destroying the exit frame. Hence preserving/restoring the registers is
1498 // slightly more complicated than simple push/pop operations.
1499 void ExitFramePreserveFPRegs();
1500 void ExitFrameRestoreFPRegs();
1501
1496 // Enter exit frame. Exit frames are used when calling C code from generated 1502 // Enter exit frame. Exit frames are used when calling C code from generated
1497 // (JavaScript) code. 1503 // (JavaScript) code.
1498 // 1504 //
1499 // The stack pointer must be jssp on entry, and will be set to csp by this 1505 // The stack pointer must be jssp on entry, and will be set to csp by this
1500 // function. The frame pointer is also configured, but the only other 1506 // function. The frame pointer is also configured, but the only other
1501 // registers modified by this function are the provided scratch register, and 1507 // registers modified by this function are the provided scratch register, and
1502 // jssp. 1508 // jssp.
1503 // 1509 //
1504 // The 'extra_space' argument can be used to allocate some space in the exit 1510 // The 'extra_space' argument can be used to allocate some space in the exit
1505 // frame that will be ignored by the GC. This space will be reserved in the 1511 // frame that will be ignored by the GC. This space will be reserved in the
1506 // bottom of the frame immediately above the return address slot. 1512 // bottom of the frame immediately above the return address slot.
1507 // 1513 //
1508 // Set up a stack frame and registers as follows: 1514 // Set up a stack frame and registers as follows:
1509 // fp[8]: CallerPC (lr) 1515 // fp[8]: CallerPC (lr)
1510 // fp -> fp[0]: CallerFP (old fp) 1516 // fp -> fp[0]: CallerFP (old fp)
1511 // fp[-8]: SPOffset (new csp) 1517 // fp[-8]: SPOffset (new csp)
1512 // fp[-16]: CodeObject() 1518 // fp[-16]: CodeObject()
1513 // csp[...]: Saved doubles, if saved_doubles is true. 1519 // fp[-16 - fp-size]: Saved doubles, if saved_doubles is true.
1514 // csp[8]: Memory reserved for the caller if extra_space != 0. 1520 // csp[8]: Memory reserved for the caller if extra_space != 0.
1515 // Alignment padding, if necessary. 1521 // Alignment padding, if necessary.
1516 // csp -> csp[0]: Space reserved for the return address. 1522 // csp -> csp[0]: Space reserved for the return address.
1517 // 1523 //
1518 // This function also stores the new frame information in the top frame, so 1524 // This function also stores the new frame information in the top frame, so
1519 // that the new frame becomes the current frame. 1525 // that the new frame becomes the current frame.
1520 void EnterExitFrame(bool save_doubles, 1526 void EnterExitFrame(bool save_doubles,
1521 const Register& scratch, 1527 const Register& scratch,
1522 int extra_space = 0); 1528 int extra_space = 0);
1523 1529
(...skipping 586 matching lines...) Expand 10 before | Expand all | Expand 10 after
2110 #error "Unsupported option" 2116 #error "Unsupported option"
2111 #define CODE_COVERAGE_STRINGIFY(x) #x 2117 #define CODE_COVERAGE_STRINGIFY(x) #x
2112 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x) 2118 #define CODE_COVERAGE_TOSTRING(x) CODE_COVERAGE_STRINGIFY(x)
2113 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__) 2119 #define __FILE_LINE__ __FILE__ ":" CODE_COVERAGE_TOSTRING(__LINE__)
2114 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm-> 2120 #define ACCESS_MASM(masm) masm->stop(__FILE_LINE__); masm->
2115 #else 2121 #else
2116 #define ACCESS_MASM(masm) masm-> 2122 #define ACCESS_MASM(masm) masm->
2117 #endif 2123 #endif
2118 2124
2119 #endif // V8_A64_MACRO_ASSEMBLER_A64_H_ 2125 #endif // V8_A64_MACRO_ASSEMBLER_A64_H_
OLDNEW
« no previous file with comments | « src/a64/frames-a64.h ('k') | src/a64/macro-assembler-a64.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698