23 */
24
25 #include "precompiled.hpp"
26 #include "interpreter/interpreter.hpp"
27 #include "interpreter/interpreterRuntime.hpp"
28 #include "memory/allocation.inline.hpp"
29 #include "prims/methodHandles.hpp"
30
31 #define __ _masm->
32
33 #ifdef PRODUCT
34 #define BLOCK_COMMENT(str) /* nothing */
35 #define STOP(error) stop(error)
36 #else
37 #define BLOCK_COMMENT(str) __ block_comment(str)
38 #define STOP(error) block_comment(error); __ stop(error)
39 #endif
40
41 #define BIND(label) bind(label); BLOCK_COMMENT(#label ":")
42
43 // Workaround for C++ overloading nastiness on '0' for RegisterOrConstant.
44 static RegisterOrConstant constant(int value) {
45 return RegisterOrConstant(value);
46 }
47
48 void MethodHandles::load_klass_from_Class(MacroAssembler* _masm, Register klass_reg) {
49 if (VerifyMethodHandles)
50 verify_klass(_masm, klass_reg, SystemDictionary::WK_KLASS_ENUM_NAME(java_lang_Class),
51 "MH argument is a Class");
52 __ movptr(klass_reg, Address(klass_reg, java_lang_Class::klass_offset_in_bytes()));
53 }
54
55 #ifdef ASSERT
56 static int check_nonzero(const char* xname, int x) {
57 assert(x != 0, err_msg("%s should be nonzero", xname));
58 return x;
59 }
60 #define NONZERO(x) check_nonzero(#x, x)
61 #else //ASSERT
62 #define NONZERO(x) (x)
63 #endif //ASSERT
64
65 #ifdef ASSERT
66 void MethodHandles::verify_klass(MacroAssembler* _masm,
67 Register obj, SystemDictionary::WKID klass_id,
|
23 */
24
25 #include "precompiled.hpp"
26 #include "interpreter/interpreter.hpp"
27 #include "interpreter/interpreterRuntime.hpp"
28 #include "memory/allocation.inline.hpp"
29 #include "prims/methodHandles.hpp"
30
31 #define __ _masm->
32
33 #ifdef PRODUCT
34 #define BLOCK_COMMENT(str) /* nothing */
35 #define STOP(error) stop(error)
36 #else
37 #define BLOCK_COMMENT(str) __ block_comment(str)
38 #define STOP(error) block_comment(error); __ stop(error)
39 #endif
40
41 #define BIND(label) bind(label); BLOCK_COMMENT(#label ":")
42
43 void MethodHandles::load_klass_from_Class(MacroAssembler* _masm, Register klass_reg) {
44 if (VerifyMethodHandles)
45 verify_klass(_masm, klass_reg, SystemDictionary::WK_KLASS_ENUM_NAME(java_lang_Class),
46 "MH argument is a Class");
47 __ movptr(klass_reg, Address(klass_reg, java_lang_Class::klass_offset_in_bytes()));
48 }
49
50 #ifdef ASSERT
51 static int check_nonzero(const char* xname, int x) {
52 assert(x != 0, err_msg("%s should be nonzero", xname));
53 return x;
54 }
55 #define NONZERO(x) check_nonzero(#x, x)
56 #else //ASSERT
57 #define NONZERO(x) (x)
58 #endif //ASSERT
59
60 #ifdef ASSERT
61 void MethodHandles::verify_klass(MacroAssembler* _masm,
62 Register obj, SystemDictionary::WKID klass_id,
|