src/cpu/x86/vm/interp_masm_x86_64.hpp

changeset 739
dc7f315e41f7
parent 435
a61af66fc99e
child 772
9ee9cf798b59
     1.1 --- a/src/cpu/x86/vm/interp_masm_x86_64.hpp	Tue Aug 26 15:49:40 2008 -0700
     1.2 +++ b/src/cpu/x86/vm/interp_masm_x86_64.hpp	Wed Aug 27 00:21:55 2008 -0700
     1.3 @@ -25,8 +25,8 @@
     1.4  // This file specializes the assember with interpreter-specific macros
     1.5  
     1.6  
     1.7 -class InterpreterMacroAssembler
     1.8 -  : public MacroAssembler {
     1.9 +class InterpreterMacroAssembler: public MacroAssembler {
    1.10 +#ifndef CC_INTERP
    1.11   protected:
    1.12    // Interpreter specific version of call_VM_base
    1.13    virtual void call_VM_leaf_base(address entry_point,
    1.14 @@ -44,52 +44,53 @@
    1.15  
    1.16    // base routine for all dispatches
    1.17    void dispatch_base(TosState state, address* table, bool verifyoop = true);
    1.18 +#endif // CC_INTERP
    1.19  
    1.20   public:
    1.21 -  InterpreterMacroAssembler(CodeBuffer* code)
    1.22 -    : MacroAssembler(code)
    1.23 -  {}
    1.24 +  InterpreterMacroAssembler(CodeBuffer* code) : MacroAssembler(code) {}
    1.25  
    1.26    void load_earlyret_value(TosState state);
    1.27  
    1.28 +#ifdef CC_INTERP
    1.29 +  void save_bcp()                                          { /*  not needed in c++ interpreter and harmless */ }
    1.30 +  void restore_bcp()                                       { /*  not needed in c++ interpreter and harmless */ }
    1.31 +
    1.32 +  // Helpers for runtime call arguments/results
    1.33 +  void get_method(Register reg);
    1.34 +
    1.35 +#else
    1.36 +
    1.37    // Interpreter-specific registers
    1.38 -  void save_bcp()
    1.39 -  {
    1.40 -    movq(Address(rbp, frame::interpreter_frame_bcx_offset * wordSize), r13);
    1.41 +  void save_bcp() {
    1.42 +    movptr(Address(rbp, frame::interpreter_frame_bcx_offset * wordSize), r13);
    1.43    }
    1.44  
    1.45 -  void restore_bcp()
    1.46 -  {
    1.47 -    movq(r13, Address(rbp, frame::interpreter_frame_bcx_offset * wordSize));
    1.48 +  void restore_bcp() {
    1.49 +    movptr(r13, Address(rbp, frame::interpreter_frame_bcx_offset * wordSize));
    1.50    }
    1.51  
    1.52 -  void restore_locals()
    1.53 -  {
    1.54 -    movq(r14, Address(rbp, frame::interpreter_frame_locals_offset * wordSize));
    1.55 +  void restore_locals() {
    1.56 +    movptr(r14, Address(rbp, frame::interpreter_frame_locals_offset * wordSize));
    1.57    }
    1.58  
    1.59    // Helpers for runtime call arguments/results
    1.60 -  void get_method(Register reg)
    1.61 -  {
    1.62 -    movq(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize));
    1.63 +  void get_method(Register reg) {
    1.64 +    movptr(reg, Address(rbp, frame::interpreter_frame_method_offset * wordSize));
    1.65    }
    1.66  
    1.67 -  void get_constant_pool(Register reg)
    1.68 -  {
    1.69 +  void get_constant_pool(Register reg) {
    1.70      get_method(reg);
    1.71 -    movq(reg, Address(reg, methodOopDesc::constants_offset()));
    1.72 +    movptr(reg, Address(reg, methodOopDesc::constants_offset()));
    1.73    }
    1.74  
    1.75 -  void get_constant_pool_cache(Register reg)
    1.76 -  {
    1.77 +  void get_constant_pool_cache(Register reg) {
    1.78      get_constant_pool(reg);
    1.79 -    movq(reg, Address(reg, constantPoolOopDesc::cache_offset_in_bytes()));
    1.80 +    movptr(reg, Address(reg, constantPoolOopDesc::cache_offset_in_bytes()));
    1.81    }
    1.82  
    1.83 -  void get_cpool_and_tags(Register cpool, Register tags)
    1.84 -  {
    1.85 +  void get_cpool_and_tags(Register cpool, Register tags) {
    1.86      get_constant_pool(cpool);
    1.87 -    movq(tags, Address(cpool, constantPoolOopDesc::tags_offset_in_bytes()));
    1.88 +    movptr(tags, Address(cpool, constantPoolOopDesc::tags_offset_in_bytes()));
    1.89    }
    1.90  
    1.91    void get_unsigned_2_byte_index_at_bcp(Register reg, int bcp_offset);
    1.92 @@ -98,6 +99,7 @@
    1.93    void get_cache_entry_pointer_at_bcp(Register cache, Register tmp,
    1.94                                        int bcp_offset);
    1.95  
    1.96 +
    1.97    void pop_ptr(Register r = rax);
    1.98    void pop_i(Register r = rax);
    1.99    void pop_l(Register r = rax);
   1.100 @@ -109,15 +111,23 @@
   1.101    void push_f(XMMRegister r = xmm0);
   1.102    void push_d(XMMRegister r = xmm0);
   1.103  
   1.104 +  void pop(Register r ) { ((MacroAssembler*)this)->pop(r); }
   1.105 +
   1.106 +  void push(Register r ) { ((MacroAssembler*)this)->push(r); }
   1.107 +  void push(int32_t imm ) { ((MacroAssembler*)this)->push(imm); }
   1.108 +
   1.109    void pop(TosState state); // transition vtos -> state
   1.110    void push(TosState state); // transition state -> vtos
   1.111  
   1.112    // Tagged stack support, pop and push both tag and value.
   1.113    void pop_ptr(Register r, Register tag);
   1.114    void push_ptr(Register r, Register tag);
   1.115 +#endif // CC_INTERP
   1.116  
   1.117    DEBUG_ONLY(void verify_stack_tag(frame::Tag t);)
   1.118  
   1.119 +#ifndef CC_INTERP
   1.120 +
   1.121    // Tagged stack helpers for swap and dup
   1.122    void load_ptr_and_tag(int n, Register val, Register tag);
   1.123    void store_ptr_and_tag(int n, Register val, Register tag);
   1.124 @@ -133,12 +143,12 @@
   1.125    void verify_local_tag(frame::Tag tag, Register idx);
   1.126  #endif // ASSERT
   1.127  
   1.128 +
   1.129    void empty_expression_stack()
   1.130    {
   1.131 -    movq(rsp, Address(rbp, frame::interpreter_frame_monitor_block_top_offset *
   1.132 -                      wordSize));
   1.133 +    movptr(rsp, Address(rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize));
   1.134      // NULL last_sp until next java call
   1.135 -    movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), NULL_WORD);
   1.136 +    movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), (int32_t)NULL_WORD);
   1.137    }
   1.138  
   1.139    // Super call_VM calls - correspond to MacroAssembler::call_VM(_leaf) calls
   1.140 @@ -185,11 +195,14 @@
   1.141                           bool throw_monitor_exception = true,
   1.142                           bool install_monitor_exception = true,
   1.143                           bool notify_jvmdi = true);
   1.144 +#endif // CC_INTERP
   1.145  
   1.146    // Object locking
   1.147    void lock_object  (Register lock_reg);
   1.148    void unlock_object(Register lock_reg);
   1.149  
   1.150 +#ifndef CC_INTERP
   1.151 +
   1.152    // Interpreter profiling operations
   1.153    void set_method_data_pointer_for_bcp();
   1.154    void test_method_data_pointer(Register mdp, Label& zero_continue);
   1.155 @@ -237,6 +250,8 @@
   1.156    // only if +VerifyFPU  && (state == ftos || state == dtos)
   1.157    void verify_FPU(int stack_depth, TosState state = ftos);
   1.158  
   1.159 +#endif // !CC_INTERP
   1.160 +
   1.161    typedef enum { NotifyJVMTI, SkipNotifyJVMTI } NotifyMethodExitMode;
   1.162  
   1.163    // support for jvmti/dtrace

mercurial