1 # Copyright (C) 2009 The Android Open Source Project 2 # 3 # Licensed under the Apache License, Version 2.0 (the "License"); 4 # you may not use this file except in compliance with the License. 5 # You may obtain a copy of the License at 6 # 7 # http://www.apache.org/licenses/LICENSE-2.0 8 # 9 # Unless required by applicable law or agreed to in writing, software 10 # distributed under the License is distributed on an "AS IS" BASIS, 11 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 # See the License for the specific language governing permissions and 13 # limitations under the License. 14 15 # Specifies the size of the assembly region in bytes 16 handler-style computed-goto 17 handler-size 64 18 19 # source for the instruction table stub 20 asm-stub x86-atom/stub.S 21 22 # file header, macros and definitions 23 import c/header.cpp 24 import x86-atom/header.S 25 26 # common defs for the C helper; include this before the instruction handlers 27 import cstubs/stubdefs.cpp 28 import c/opcommon.cpp 29 30 # start of opcode list; command gives default directory location of instruction files 31 op-start x86-atom 32 33 #op OP_ADD_DOUBLE_2ADDR c 34 #op OP_ADD_DOUBLE c 35 #op OP_ADD_FLOAT_2ADDR c 36 #op OP_ADD_FLOAT c 37 #op OP_ADD_INT_2ADDR c 38 #op OP_ADD_INT_LIT16 c 39 #op OP_ADD_INT_LIT8 c 40 #op OP_ADD_INT c 41 #op OP_ADD_LONG_2ADDR c 42 #op OP_ADD_LONG c 43 #op OP_AGET_BOOLEAN c 44 #op OP_AGET_BYTE c 45 #op OP_AGET_CHAR c 46 #op OP_AGET_OBJECT c 47 #op OP_AGET c 48 #op OP_AGET_SHORT c 49 #op OP_AGET_WIDE c 50 #op OP_AND_INT_2ADDR c 51 #op OP_AND_INT_LIT16 c 52 #op OP_AND_INT_LIT8 c 53 #op OP_AND_INT c 54 #op OP_AND_LONG_2ADDR c 55 #op OP_AND_LONG c 56 #op OP_APUT_BOOLEAN c 57 #op OP_APUT_BYTE c 58 #op OP_APUT_CHAR c 59 #op OP_APUT_OBJECT c 60 #op OP_APUT c 61 #op OP_APUT_SHORT c 62 #op OP_APUT_WIDE c 63 #op OP_ARRAY_LENGTH c 64 #op OP_CHECK_CAST c 65 #op OP_CMPG_DOUBLE c 66 #op OP_CMPG_FLOAT c 67 #op OP_CMPL_DOUBLE c 68 #op OP_CMPL_FLOAT c 69 #op OP_CMP_LONG c 70 #op OP_CONST_16 c 71 #op OP_CONST_4 c 72 #op OP_CONST_CLASS c 73 #op OP_CONST_HIGH16 c 74 #op OP_CONST c 75 #op OP_CONST_STRING_JUMBO c 76 #op OP_CONST_STRING c 77 #op OP_CONST_WIDE_16 c 78 #op OP_CONST_WIDE_32 c 79 #op OP_CONST_WIDE_HIGH16 c 80 #op OP_CONST_WIDE c 81 #op OP_DIV_DOUBLE_2ADDR c 82 #op OP_DIV_DOUBLE c 83 #op OP_DIV_FLOAT_2ADDR c 84 #op OP_DIV_FLOAT c 85 #op OP_DIV_INT_2ADDR c 86 #op OP_DIV_INT_LIT16 c 87 #op OP_DIV_INT_LIT8 c 88 #op OP_DIV_INT c 89 #op OP_DIV_LONG_2ADDR c 90 #op OP_DIV_LONG c 91 #op OP_DOUBLE_TO_FLOAT c 92 #op OP_DOUBLE_TO_INT c 93 #op OP_DOUBLE_TO_LONG c 94 #op OP_EXECUTE_INLINE c 95 #op OP_FILL_ARRAY_DATA c 96 #op OP_FILLED_NEW_ARRAY_RANGE c 97 #op OP_FILLED_NEW_ARRAY c 98 #op OP_FLOAT_TO_DOUBLE c 99 #op OP_FLOAT_TO_INT c 100 #op OP_FLOAT_TO_LONG c 101 #op OP_GOTO_16 c 102 #op OP_GOTO_32 c 103 #op OP_GOTO c 104 #op OP_IF_EQ c 105 #op OP_IF_EQZ c 106 #op OP_IF_GE c 107 #op OP_IF_GEZ c 108 #op OP_IF_GT c 109 #op OP_IF_GTZ c 110 #op OP_IF_LE c 111 #op OP_IF_LEZ c 112 #op OP_IF_LT c 113 #op OP_IF_LTZ c 114 #op OP_IF_NE c 115 #op OP_IF_NEZ c 116 #op OP_IGET_BOOLEAN c 117 #op OP_IGET_BYTE c 118 #op OP_IGET_CHAR c 119 #op OP_IGET_OBJECT_QUICK c 120 #op OP_IGET_OBJECT c 121 #op OP_IGET_QUICK c 122 #op OP_IGET c 123 #op OP_IGET_SHORT c 124 #op OP_IGET_WIDE_QUICK c 125 #op OP_IGET_WIDE c 126 #op OP_INSTANCE_OF c 127 #op OP_INT_TO_BYTE c 128 #op OP_INT_TO_CHAR c 129 #op OP_INT_TO_DOUBLE c 130 #op OP_INT_TO_FLOAT c 131 #op OP_INT_TO_LONG c 132 #op OP_INT_TO_SHORT c 133 #op OP_INVOKE_DIRECT_EMPTY c 134 #op OP_INVOKE_DIRECT_RANGE c 135 #op OP_INVOKE_DIRECT c 136 #op OP_INVOKE_INTERFACE_RANGE c 137 #op OP_INVOKE_INTERFACE c 138 #op OP_INVOKE_STATIC_RANGE c 139 #op OP_INVOKE_STATIC c 140 #op OP_INVOKE_SUPER_QUICK_RANGE c 141 #op OP_INVOKE_SUPER_QUICK c 142 #op OP_INVOKE_SUPER_RANGE c 143 #op OP_INVOKE_SUPER c 144 #op OP_INVOKE_VIRTUAL_QUICK_RANGE c 145 #op OP_INVOKE_VIRTUAL_QUICK c 146 #op OP_INVOKE_VIRTUAL_RANGE c 147 #op OP_INVOKE_VIRTUAL c 148 #op OP_IPUT_BOOLEAN c 149 #op OP_IPUT_BYTE c 150 #op OP_IPUT_CHAR c 151 #op OP_IPUT_OBJECT_QUICK c 152 #op OP_IPUT_OBJECT c 153 #op OP_IPUT_QUICK c 154 #op OP_IPUT c 155 #op OP_IPUT_SHORT c 156 #op OP_IPUT_WIDE_QUICK c 157 #op OP_IPUT_WIDE c 158 #op OP_LONG_TO_DOUBLE c 159 #op OP_LONG_TO_FLOAT c 160 #op OP_LONG_TO_INT c 161 #op OP_MONITOR_ENTER c 162 #op OP_MONITOR_EXIT c 163 #op OP_MOVE_16 c 164 #op OP_MOVE_EXCEPTION c 165 #op OP_MOVE_FROM16 c 166 #op OP_MOVE_OBJECT_16 c 167 #op OP_MOVE_OBJECT_FROM16 c 168 #op OP_MOVE_OBJECT c 169 #op OP_MOVE_RESULT_OBJECT c 170 #op OP_MOVE_RESULT c 171 #op OP_MOVE_RESULT_WIDE c 172 #op OP_MOVE c 173 #op OP_MOVE_WIDE_16 c 174 #op OP_MOVE_WIDE_FROM16 c 175 #op OP_MOVE_WIDE c 176 #op OP_MUL_DOUBLE_2ADDR c 177 #op OP_MUL_DOUBLE c 178 #op OP_MUL_FLOAT_2ADDR c 179 #op OP_MUL_FLOAT c 180 #op OP_MUL_INT_2ADDR c 181 #op OP_MUL_INT_LIT16 c 182 #op OP_MUL_INT_LIT8 c 183 #op OP_MUL_INT c 184 #op OP_MUL_LONG_2ADDR c 185 #op OP_MUL_LONG c 186 #op OP_NEG_DOUBLE c 187 #op OP_NEG_FLOAT c 188 #op OP_NEG_INT c 189 #op OP_NEG_LONG c 190 #op OP_NEW_ARRAY c 191 #op OP_NEW_INSTANCE c 192 #op OP_NOP c 193 #op OP_NOT_INT c 194 #op OP_NOT_LONG c 195 #op OP_OR_INT_2ADDR c 196 #op OP_OR_INT_LIT16 c 197 #op OP_OR_INT_LIT8 c 198 #op OP_OR_INT c 199 #op OP_OR_LONG_2ADDR c 200 #op OP_OR_LONG c 201 #op OP_PACKED_SWITCH c 202 #op OP_REM_DOUBLE_2ADDR c 203 #op OP_REM_DOUBLE c 204 #op OP_REM_FLOAT_2ADDR c 205 #op OP_REM_FLOAT c 206 #op OP_REM_INT_2ADDR c 207 #op OP_REM_INT_LIT16 c 208 #op OP_REM_INT_LIT8 c 209 #op OP_REM_INT c 210 #op OP_REM_LONG_2ADDR c 211 #op OP_REM_LONG c 212 #op OP_RETURN_OBJECT c 213 #op OP_RETURN c 214 #op OP_RETURN_VOID c 215 #op OP_RETURN_WIDE c 216 #op OP_RSUB_INT_LIT8 c 217 #op OP_RSUB_INT c 218 #op OP_SGET_BOOLEAN c 219 #op OP_SGET_BYTE c 220 #op OP_SGET_CHAR c 221 #op OP_SGET_OBJECT c 222 #op OP_SGET c 223 #op OP_SGET_SHORT c 224 #op OP_SGET_WIDE c 225 #op OP_SHL_INT_2ADDR c 226 #op OP_SHL_INT_LIT8 c 227 #op OP_SHL_INT c 228 #op OP_SHL_LONG_2ADDR c 229 #op OP_SHL_LONG c 230 #op OP_SHR_INT_2ADDR c 231 #op OP_SHR_INT_LIT8 c 232 #op OP_SHR_INT c 233 #op OP_SHR_LONG_2ADDR c 234 #op OP_SHR_LONG c 235 #op OP_SPARSE_SWITCH c 236 #op OP_SPUT_BOOLEAN c 237 #op OP_SPUT_BYTE c 238 #op OP_SPUT_CHAR c 239 #op OP_SPUT_OBJECT c 240 #op OP_SPUT c 241 #op OP_SPUT_SHORT c 242 #op OP_SPUT_WIDE c 243 #op OP_SUB_DOUBLE_2ADDR c 244 #op OP_SUB_DOUBLE c 245 #op OP_SUB_FLOAT_2ADDR c 246 #op OP_SUB_FLOAT c 247 #op OP_SUB_INT_2ADDR c 248 #op OP_SUB_INT c 249 #op OP_SUB_LONG_2ADDR c 250 #op OP_SUB_LONG c 251 #op OP_THROW c 252 #op OP_UNUSED_3E c 253 #op OP_UNUSED_3F c 254 #op OP_UNUSED_40 c 255 #op OP_UNUSED_41 c 256 #op OP_UNUSED_42 c 257 #op OP_UNUSED_43 c 258 #op OP_UNUSED_73 c 259 #op OP_UNUSED_79 c 260 #op OP_UNUSED_7A c 261 #op OP_UNUSED_F1 c 262 #op OP_UNUSED_FC c 263 #op OP_UNUSED_FD c 264 #op OP_UNUSED_FE c 265 #op OP_UNUSED_FF c 266 #op OP_USHR_INT_2ADDR c 267 #op OP_USHR_INT_LIT8 c 268 #op OP_USHR_INT c 269 #op OP_USHR_LONG_2ADDR c 270 #op OP_USHR_LONG c 271 #op OP_XOR_INT_2ADDR c 272 #op OP_XOR_INT_LIT16 c 273 #op OP_XOR_INT_LIT8 c 274 #op OP_XOR_INT c 275 #op OP_XOR_LONG_2ADDR c 276 #op OP_XOR_LONG c 277 278 # TODO: provide native implementations 279 op OP_BREAKPOINT c 280 op OP_EXECUTE_INLINE_RANGE c 281 op OP_IGET_VOLATILE c 282 op OP_IPUT_VOLATILE c 283 op OP_SGET_VOLATILE c 284 op OP_SPUT_VOLATILE c 285 op OP_IGET_OBJECT_VOLATILE c 286 op OP_IPUT_OBJECT_VOLATILE c 287 op OP_SGET_OBJECT_VOLATILE c 288 op OP_SPUT_OBJECT_VOLATILE c 289 op OP_IGET_WIDE_VOLATILE c 290 op OP_IPUT_WIDE_VOLATILE c 291 op OP_SGET_WIDE_VOLATILE c 292 op OP_SPUT_WIDE_VOLATILE c 293 op OP_RETURN_VOID_BARRIER c 294 op OP_INVOKE_OBJECT_INIT_RANGE c 295 296 op-end 297 298 # arch-specific entry point to interpreter 299 import x86-atom/entry.S 300 301 # "helper" code for C; include this after the instruction handlers 302 import c/gotoTargets.cpp 303 import cstubs/enddefs.cpp 304 305 # common subroutines for asm 306 import x86-atom/footer.S 307