hotspot/src/cpu/x86/vm/interp_masm_x86_32.hpp
changeset 5419 f2e8cc8c12ea
parent 4754 8aef16f24e16
child 5688 9052dc91ea67
child 5547 f4b087cbb361
equal deleted inserted replaced
5418:c4955cb6ed33 5419:f2e8cc8c12ea
     1 /*
     1 /*
     2  * Copyright 1997-2009 Sun Microsystems, Inc.  All Rights Reserved.
     2  * Copyright 1997-2010 Sun Microsystems, Inc.  All Rights Reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.
     7  * published by the Free Software Foundation.
    83   // Expression stack
    83   // Expression stack
    84   void f2ieee();                                           // truncate ftos to 32bits
    84   void f2ieee();                                           // truncate ftos to 32bits
    85   void d2ieee();                                           // truncate dtos to 64bits
    85   void d2ieee();                                           // truncate dtos to 64bits
    86 
    86 
    87   void pop_ptr(Register r = rax);
    87   void pop_ptr(Register r = rax);
    88   void pop_ptr(Register r, Register tag);
       
    89   void pop_i(Register r = rax);
    88   void pop_i(Register r = rax);
    90   void pop_l(Register lo = rax, Register hi = rdx);
    89   void pop_l(Register lo = rax, Register hi = rdx);
    91   void pop_f();
    90   void pop_f();
    92   void pop_d();
    91   void pop_d();
    93   void pop_ftos_to_rsp();
       
    94   void pop_dtos_to_rsp();
       
    95 
    92 
    96   void push_ptr(Register r = rax);
    93   void push_ptr(Register r = rax);
    97   void push_ptr(Register r, Register tag);
       
    98   void push_i(Register r = rax);
    94   void push_i(Register r = rax);
    99   void push_l(Register lo = rax, Register hi = rdx);
    95   void push_l(Register lo = rax, Register hi = rdx);
   100   void push_d(Register r = rax);
    96   void push_d(Register r = rax);
   101   void push_f();
    97   void push_f();
   102 
    98 
   110 
   106 
   111   // These are dummies to prevent surprise implicit conversions to Register
   107   // These are dummies to prevent surprise implicit conversions to Register
   112   void pop(void* v ); // Add unimplemented ambiguous method
   108   void pop(void* v ); // Add unimplemented ambiguous method
   113   void push(void* v );   // Add unimplemented ambiguous method
   109   void push(void* v );   // Add unimplemented ambiguous method
   114 
   110 
   115   DEBUG_ONLY(void verify_stack_tag(frame::Tag t);)
   111   void empty_expression_stack() {
   116 
   112     movptr(rsp, Address(rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize));
   117 #endif // CC_INTERP
   113     // NULL last_sp until next java call
   118 
   114     movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), NULL_WORD);
   119 #ifndef CC_INTERP
       
   120 
       
   121   void empty_expression_stack()                            {
       
   122        movptr(rsp, Address(rbp, frame::interpreter_frame_monitor_block_top_offset * wordSize));
       
   123       // NULL last_sp until next java call
       
   124       movptr(Address(rbp, frame::interpreter_frame_last_sp_offset * wordSize), NULL_WORD);
       
   125   }
   115   }
   126 
   116 
   127   // Tagged stack helpers for swap and dup
   117   // Helpers for swap and dup
   128   void load_ptr_and_tag(int n, Register val, Register tag);
   118   void load_ptr(int n, Register val);
   129   void store_ptr_and_tag(int n, Register val, Register tag);
   119   void store_ptr(int n, Register val);
   130 
       
   131   // Tagged Local support
       
   132 
       
   133   void tag_local(frame::Tag tag, int n);
       
   134   void tag_local(Register tag, int n);
       
   135   void tag_local(frame::Tag tag, Register idx);
       
   136   void tag_local(Register tag, Register idx);
       
   137 
       
   138 #ifdef ASSERT
       
   139   void verify_local_tag(frame::Tag tag, int n);
       
   140   void verify_local_tag(frame::Tag tag, Register idx);
       
   141 #endif // ASSERT
       
   142 
   120 
   143   // Super call_VM calls - correspond to MacroAssembler::call_VM(_leaf) calls
   121   // Super call_VM calls - correspond to MacroAssembler::call_VM(_leaf) calls
   144   void super_call_VM_leaf(address entry_point);
   122   void super_call_VM_leaf(address entry_point);
   145   void super_call_VM_leaf(address entry_point, Register arg_1);
   123   void super_call_VM_leaf(address entry_point, Register arg_1);
   146   void super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2);
   124   void super_call_VM_leaf(address entry_point, Register arg_1, Register arg_2);