Mercurial > hg > graal-compiler
diff src/share/vm/asm/assembler.hpp @ 7197:1acccb7c0b01
8003850: add support for constants in stub code
Summary: remember the code section and switch back to the proper one when adding constants.
Reviewed-by: twisti, kvn
Contributed-by: goetz.lindenmaier@sap.com
author | kvn |
---|---|
date | Tue, 27 Nov 2012 17:41:38 -0800 |
parents | b9a9ed0f8eeb |
children | 6ab62ad83507 |
line wrap: on
line diff
--- a/src/share/vm/asm/assembler.hpp Tue Nov 27 17:24:15 2012 -0800 +++ b/src/share/vm/asm/assembler.hpp Tue Nov 27 17:41:38 2012 -0800 @@ -348,52 +348,60 @@ void end_a_stub(); // Ditto for constants. address start_a_const(int required_space, int required_align = sizeof(double)); - void end_a_const(); + void end_a_const(CodeSection* cs); // Pass the codesection to continue in (insts or stubs?). // constants support + // + // We must remember the code section (insts or stubs) in c1 + // so we can reset to the proper section in end_a_const(). address long_constant(jlong c) { + CodeSection* c1 = _code_section; address ptr = start_a_const(sizeof(c), sizeof(c)); if (ptr != NULL) { *(jlong*)ptr = c; _code_pos = ptr + sizeof(c); - end_a_const(); + end_a_const(c1); } return ptr; } address double_constant(jdouble c) { + CodeSection* c1 = _code_section; address ptr = start_a_const(sizeof(c), sizeof(c)); if (ptr != NULL) { *(jdouble*)ptr = c; _code_pos = ptr + sizeof(c); - end_a_const(); + end_a_const(c1); } return ptr; } address float_constant(jfloat c) { + CodeSection* c1 = _code_section; address ptr = start_a_const(sizeof(c), sizeof(c)); if (ptr != NULL) { *(jfloat*)ptr = c; _code_pos = ptr + sizeof(c); - end_a_const(); + end_a_const(c1); } return ptr; } address address_constant(address c) { + CodeSection* c1 = _code_section; address ptr = start_a_const(sizeof(c), sizeof(c)); if (ptr != NULL) { *(address*)ptr = c; _code_pos = ptr + sizeof(c); - end_a_const(); + end_a_const(c1); } return ptr; } address address_constant(address c, RelocationHolder const& rspec) { + CodeSection* c1 = _code_section; address ptr = start_a_const(sizeof(c), sizeof(c)); if (ptr != NULL) { relocate(rspec); *(address*)ptr = c; _code_pos = ptr + sizeof(c); - end_a_const(); + end_a_const(c1); } return ptr; }