1 /* |
1 /* |
2 * Copyright 1997-2007 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. |
29 // return address and convert the return to a specialized |
29 // return address and convert the return to a specialized |
30 // block of code to handle compiedl return values and cleaning |
30 // block of code to handle compiedl return values and cleaning |
31 // the fpu stack. |
31 // the fpu stack. |
32 static const int return_sentinel; |
32 static const int return_sentinel; |
33 |
33 |
34 |
34 static Address::ScaleFactor stackElementScale() { return Address::times_4; } |
35 static Address::ScaleFactor stackElementScale() { |
|
36 return TaggedStackInterpreter? Address::times_8 : Address::times_4; |
|
37 } |
|
38 |
35 |
39 // Offset from rsp (which points to the last stack element) |
36 // Offset from rsp (which points to the last stack element) |
40 static int expr_offset_in_bytes(int i) { return stackElementSize()*i ; } |
37 static int expr_offset_in_bytes(int i) { return stackElementSize * i; } |
41 static int expr_tag_offset_in_bytes(int i) { |
|
42 assert(TaggedStackInterpreter, "should not call this"); |
|
43 return expr_offset_in_bytes(i) + wordSize; |
|
44 } |
|
45 |
|
46 // Support for Tagged Stacks |
|
47 |
38 |
48 // Stack index relative to tos (which points at value) |
39 // Stack index relative to tos (which points at value) |
49 static int expr_index_at(int i) { |
40 static int expr_index_at(int i) { return stackElementWords * i; } |
50 return stackElementWords() * i; |
|
51 } |
|
52 |
|
53 static int expr_tag_index_at(int i) { |
|
54 assert(TaggedStackInterpreter, "should not call this"); |
|
55 // tag is one word above java stack element |
|
56 return stackElementWords() * i + 1; |
|
57 } |
|
58 |
41 |
59 // Already negated by c++ interpreter |
42 // Already negated by c++ interpreter |
60 static int local_index_at(int i) { |
43 static int local_index_at(int i) { |
61 assert(i<=0, "local direction already negated"); |
44 assert(i <= 0, "local direction already negated"); |
62 return stackElementWords() * i + (value_offset_in_bytes()/wordSize); |
45 return stackElementWords * i; |
63 } |
46 } |
64 |
|
65 static int local_tag_index_at(int i) { |
|
66 assert(i<=0, "local direction already negated"); |
|
67 assert(TaggedStackInterpreter, "should not call this"); |
|
68 return stackElementWords() * i + (tag_offset_in_bytes()/wordSize); |
|
69 } |
|