blob: cba0c5d6158d84511fdd182ca41bf02299617e92 [file] [log] [blame]
The Android Open Source Projectf6c38712009-03-03 19:28:47 -08001<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
2
3<html>
4
5<head>
6<title>filled-new-array</title>
7<link rel=stylesheet href="opcode.css">
8</head>
9
10<body>
11
12<h1>filled-new-array</h1>
13
14<h2>Purpose</h2>
15
16<p>
17Construct an array of the given type and size, filling it with the supplied
18contents. The type must be an array type. The array's contents must be
19single-word (that is, no arrays of long or double). The constructed instance is
20stored as a "result" in the same way that the method invocation instructions
21store their results, so the constructed instance must be moved to a register
22with a subsequent move-result-object instruction (if it is to be used).
23</p>
24
25<h2>Details</h2>
26
27<table class="instruc">
28<thead>
29<tr>
30 <th>Op &amp; Format</th>
31 <th>Mnemonic / Syntax</th>
32 <th>Arguments</th>
33</tr>
34</thead>
35<tbody>
36<tr>
37 <td>24 35c</td>
38 <td>filled-new-array {vD, vE, vF, vG, vA}, type@CCCC</td>
39 <td><code>B:</code> array size and argument word count (4 bits)<br/>
40 <code>C:</code> type index (16 bits)<br/>
41 <code>D..G, A:</code> argument registers (4 bits each)</td>
42</tr>
43</tbody>
44</table>
45
46<h2>Constraints</h2>
47
48<ul>
49 <li>
50 The value B must not be greater than 5.
51 </li>
52 <li>
53 If B > 0, then D must be a valid register index in the current stack frame.
54 </li>
55 <li>
56 If B > 1, then E must be a valid register index in the current stack frame.
57 </li>
58 <li>
59 If B > 2, then F must be a valid register index in the current stack frame.
60 </li>
61 <li>
62 If B > 3, then G must be a valid register index in the current stack frame.
63 </li>
64 <li>
65 If B > 4, then A must be a valid register index in the current stack frame.
66 </li>
67 <li>
68 C must be a valid index into the type pool.
69 </li>
70 <li>
71 The type denoted by C must be a valid array type descriptor.
72 </li>
73 <li>
74 The element size of the type denoted by C must be no larger than 32 bits.
75 </li>
76 <li>
77 If the element type is a primitive type, then all actual arguments
78 (vD .. vA, depending on B) must be primitive, too.
79 </li>
80 <li>
81 If the element type is a reference type, then all actual arguments
82 (vD .. vA, depending on B) must be references, too.
83 </li>
84</ul>
85
86<h2>Behavior</h2>
87
88<ul>
89 <li>
90 An attempt is made to get a reference to the type T the name of which is
91 contained in type pool entry C.
92 </li>
93 <li>
94 If T is a reference type and it has not been loaded and resolved before, it
95 is being loaded and resolved. All exceptions that are possible during class
96 loading can occur at this point.
97 </li>
98 <li>
99 An attempt is made to create a new array R of type T and length B. All
100 exceptions that are possible during instantiation can occur at this point.
101 </li>
102 <li>
103 The elements of R are filled according to the following rules:
104 <ul>
105 <li>
106 If B > 0 then R[0] = vD
107 </li>
108 <li>
109 If B > 1 then R[1] = vE
110 </li>
111 <li>
112 If B > 2 then R[2] = vF
113 </li>
114 <li>
115 If B > 3 then R[3] = vG
116 </li>
117 <li>
118 If B > 4 then R[4] = vA
119 </li>
120 </ul>
121 </li>
122 <li>
123 No reference to R is stored in any register. Instead, R can be accessed by a
124 move-result-object instruction immediately following this filled-new-array
125 instruction.
126 </li>
127</ul>
128
129<h2>Exceptions</h2>
130
131<ul>
132 <li>
133 NegativeArraySizeException if vB < 0
134 </li>
135 <li>
136 All exceptions that are possible during class loading can occur.
137 </li>
138 <li>
139 All exceptions that are possible during instantiation can occur.
140 </li>
141</ul>
142
143</body>
144</html>