1 // SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0 2 /****************************************************************************** 3 * 4 * Module Name: psopcode - Parser/Interpreter opcode information table 5 * 6 * Copyright (C) 2000 - 2020, Intel Corp. 7 * 8 *****************************************************************************/ 9 10 #include <acpi/acpi.h> 11 #include "accommon.h" 12 #include "acopcode.h" 13 #include "amlcode.h" 14 15 #define _COMPONENT ACPI_PARSER 16 ACPI_MODULE_NAME("psopcode") 17 18 /******************************************************************************* 19 * 20 * NAME: acpi_gbl_aml_op_info 21 * 22 * DESCRIPTION: Opcode table. Each entry contains <opcode, type, name, operands> 23 * The name is a simple ascii string, the operand specifier is an 24 * ascii string with one letter per operand. The letter specifies 25 * the operand type. 26 * 27 ******************************************************************************/ 28 /* 29 * Summary of opcode types/flags 30 * 31 32 Opcodes that have associated namespace objects (AML_NSOBJECT flag) 33 34 AML_SCOPE_OP 35 AML_DEVICE_OP 36 AML_THERMAL_ZONE_OP 37 AML_METHOD_OP 38 AML_POWER_RESOURCE_OP 39 AML_PROCESSOR_OP 40 AML_FIELD_OP 41 AML_INDEX_FIELD_OP 42 AML_BANK_FIELD_OP 43 AML_NAME_OP 44 AML_ALIAS_OP 45 AML_MUTEX_OP 46 AML_EVENT_OP 47 AML_REGION_OP 48 AML_CREATE_FIELD_OP 49 AML_CREATE_BIT_FIELD_OP 50 AML_CREATE_BYTE_FIELD_OP 51 AML_CREATE_WORD_FIELD_OP 52 AML_CREATE_DWORD_FIELD_OP 53 AML_CREATE_QWORD_FIELD_OP 54 AML_INT_NAMEDFIELD_OP 55 AML_INT_METHODCALL_OP 56 AML_INT_NAMEPATH_OP 57 58 Opcodes that are "namespace" opcodes (AML_NSOPCODE flag) 59 60 AML_SCOPE_OP 61 AML_DEVICE_OP 62 AML_THERMAL_ZONE_OP 63 AML_METHOD_OP 64 AML_POWER_RESOURCE_OP 65 AML_PROCESSOR_OP 66 AML_FIELD_OP 67 AML_INDEX_FIELD_OP 68 AML_BANK_FIELD_OP 69 AML_NAME_OP 70 AML_ALIAS_OP 71 AML_MUTEX_OP 72 AML_EVENT_OP 73 AML_REGION_OP 74 AML_INT_NAMEDFIELD_OP 75 76 Opcodes that have an associated namespace node (AML_NSNODE flag) 77 78 AML_SCOPE_OP 79 AML_DEVICE_OP 80 AML_THERMAL_ZONE_OP 81 AML_METHOD_OP 82 AML_POWER_RESOURCE_OP 83 AML_PROCESSOR_OP 84 AML_NAME_OP 85 AML_ALIAS_OP 86 AML_MUTEX_OP 87 AML_EVENT_OP 88 AML_REGION_OP 89 AML_CREATE_FIELD_OP 90 AML_CREATE_BIT_FIELD_OP 91 AML_CREATE_BYTE_FIELD_OP 92 AML_CREATE_WORD_FIELD_OP 93 AML_CREATE_DWORD_FIELD_OP 94 AML_CREATE_QWORD_FIELD_OP 95 AML_INT_NAMEDFIELD_OP 96 AML_INT_METHODCALL_OP 97 AML_INT_NAMEPATH_OP 98 99 Opcodes that define named ACPI objects (AML_NAMED flag) 100 101 AML_SCOPE_OP 102 AML_DEVICE_OP 103 AML_THERMAL_ZONE_OP 104 AML_METHOD_OP 105 AML_POWER_RESOURCE_OP 106 AML_PROCESSOR_OP 107 AML_NAME_OP 108 AML_ALIAS_OP 109 AML_MUTEX_OP 110 AML_EVENT_OP 111 AML_REGION_OP 112 AML_INT_NAMEDFIELD_OP 113 114 Opcodes that contain executable AML as part of the definition that 115 must be deferred until needed 116 117 AML_METHOD_OP 118 AML_VARIABLE_PACKAGE_OP 119 AML_CREATE_FIELD_OP 120 AML_CREATE_BIT_FIELD_OP 121 AML_CREATE_BYTE_FIELD_OP 122 AML_CREATE_WORD_FIELD_OP 123 AML_CREATE_DWORD_FIELD_OP 124 AML_CREATE_QWORD_FIELD_OP 125 AML_REGION_OP 126 AML_BUFFER_OP 127 128 Field opcodes 129 130 AML_CREATE_FIELD_OP 131 AML_FIELD_OP 132 AML_INDEX_FIELD_OP 133 AML_BANK_FIELD_OP 134 135 Field "Create" opcodes 136 137 AML_CREATE_FIELD_OP 138 AML_CREATE_BIT_FIELD_OP 139 AML_CREATE_BYTE_FIELD_OP 140 AML_CREATE_WORD_FIELD_OP 141 AML_CREATE_DWORD_FIELD_OP 142 AML_CREATE_QWORD_FIELD_OP 143 144 ******************************************************************************/ 145 /* 146 * Master Opcode information table. A summary of everything we know about each 147 * opcode, all in one place. 148 */ 149 const struct acpi_opcode_info acpi_gbl_aml_op_info[AML_NUM_OPCODES] = { 150 /*! [Begin] no source code translation */ 151 /* Index Name Parser Args Interpreter Args ObjectType Class Type Flags */ 152 153 /* 00 */ ACPI_OP("Zero", ARGP_ZERO_OP, ARGI_ZERO_OP, ACPI_TYPE_INTEGER, 154 AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT), 155 /* 01 */ ACPI_OP("One", ARGP_ONE_OP, ARGI_ONE_OP, ACPI_TYPE_INTEGER, 156 AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT), 157 /* 02 */ ACPI_OP("Alias", ARGP_ALIAS_OP, ARGI_ALIAS_OP, 158 ACPI_TYPE_LOCAL_ALIAS, AML_CLASS_NAMED_OBJECT, 159 AML_TYPE_NAMED_SIMPLE, 160 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | 161 AML_NSNODE | AML_NAMED), 162 /* 03 */ ACPI_OP("Name", ARGP_NAME_OP, ARGI_NAME_OP, ACPI_TYPE_ANY, 163 AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, 164 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | 165 AML_NSNODE | AML_NAMED), 166 /* 04 */ ACPI_OP("ByteConst", ARGP_BYTE_OP, ARGI_BYTE_OP, 167 ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, 168 AML_TYPE_LITERAL, AML_CONSTANT), 169 /* 05 */ ACPI_OP("WordConst", ARGP_WORD_OP, ARGI_WORD_OP, 170 ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, 171 AML_TYPE_LITERAL, AML_CONSTANT), 172 /* 06 */ ACPI_OP("DwordConst", ARGP_DWORD_OP, ARGI_DWORD_OP, 173 ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, 174 AML_TYPE_LITERAL, AML_CONSTANT), 175 /* 07 */ ACPI_OP("String", ARGP_STRING_OP, ARGI_STRING_OP, 176 ACPI_TYPE_STRING, AML_CLASS_ARGUMENT, 177 AML_TYPE_LITERAL, AML_CONSTANT), 178 /* 08 */ ACPI_OP("Scope", ARGP_SCOPE_OP, ARGI_SCOPE_OP, 179 ACPI_TYPE_LOCAL_SCOPE, AML_CLASS_NAMED_OBJECT, 180 AML_TYPE_NAMED_NO_OBJ, 181 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | 182 AML_NSNODE | AML_NAMED), 183 /* 09 */ ACPI_OP("Buffer", ARGP_BUFFER_OP, ARGI_BUFFER_OP, 184 ACPI_TYPE_BUFFER, AML_CLASS_CREATE, 185 AML_TYPE_CREATE_OBJECT, 186 AML_HAS_ARGS | AML_DEFER | AML_CONSTANT), 187 /* 0A */ ACPI_OP("Package", ARGP_PACKAGE_OP, ARGI_PACKAGE_OP, 188 ACPI_TYPE_PACKAGE, AML_CLASS_CREATE, 189 AML_TYPE_CREATE_OBJECT, 190 AML_HAS_ARGS | AML_DEFER | AML_CONSTANT), 191 /* 0B */ ACPI_OP("Method", ARGP_METHOD_OP, ARGI_METHOD_OP, 192 ACPI_TYPE_METHOD, AML_CLASS_NAMED_OBJECT, 193 AML_TYPE_NAMED_COMPLEX, 194 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | 195 AML_NSNODE | AML_NAMED | AML_DEFER), 196 /* 0C */ ACPI_OP("Local0", ARGP_LOCAL0, ARGI_LOCAL0, 197 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 198 AML_TYPE_LOCAL_VARIABLE, 0), 199 /* 0D */ ACPI_OP("Local1", ARGP_LOCAL1, ARGI_LOCAL1, 200 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 201 AML_TYPE_LOCAL_VARIABLE, 0), 202 /* 0E */ ACPI_OP("Local2", ARGP_LOCAL2, ARGI_LOCAL2, 203 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 204 AML_TYPE_LOCAL_VARIABLE, 0), 205 /* 0F */ ACPI_OP("Local3", ARGP_LOCAL3, ARGI_LOCAL3, 206 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 207 AML_TYPE_LOCAL_VARIABLE, 0), 208 /* 10 */ ACPI_OP("Local4", ARGP_LOCAL4, ARGI_LOCAL4, 209 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 210 AML_TYPE_LOCAL_VARIABLE, 0), 211 /* 11 */ ACPI_OP("Local5", ARGP_LOCAL5, ARGI_LOCAL5, 212 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 213 AML_TYPE_LOCAL_VARIABLE, 0), 214 /* 12 */ ACPI_OP("Local6", ARGP_LOCAL6, ARGI_LOCAL6, 215 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 216 AML_TYPE_LOCAL_VARIABLE, 0), 217 /* 13 */ ACPI_OP("Local7", ARGP_LOCAL7, ARGI_LOCAL7, 218 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 219 AML_TYPE_LOCAL_VARIABLE, 0), 220 /* 14 */ ACPI_OP("Arg0", ARGP_ARG0, ARGI_ARG0, 221 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 222 AML_TYPE_METHOD_ARGUMENT, 0), 223 /* 15 */ ACPI_OP("Arg1", ARGP_ARG1, ARGI_ARG1, 224 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 225 AML_TYPE_METHOD_ARGUMENT, 0), 226 /* 16 */ ACPI_OP("Arg2", ARGP_ARG2, ARGI_ARG2, 227 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 228 AML_TYPE_METHOD_ARGUMENT, 0), 229 /* 17 */ ACPI_OP("Arg3", ARGP_ARG3, ARGI_ARG3, 230 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 231 AML_TYPE_METHOD_ARGUMENT, 0), 232 /* 18 */ ACPI_OP("Arg4", ARGP_ARG4, ARGI_ARG4, 233 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 234 AML_TYPE_METHOD_ARGUMENT, 0), 235 /* 19 */ ACPI_OP("Arg5", ARGP_ARG5, ARGI_ARG5, 236 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 237 AML_TYPE_METHOD_ARGUMENT, 0), 238 /* 1A */ ACPI_OP("Arg6", ARGP_ARG6, ARGI_ARG6, 239 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 240 AML_TYPE_METHOD_ARGUMENT, 0), 241 /* 1B */ ACPI_OP("Store", ARGP_STORE_OP, ARGI_STORE_OP, ACPI_TYPE_ANY, 242 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, 243 AML_FLAGS_EXEC_1A_1T_1R), 244 /* 1C */ ACPI_OP("RefOf", ARGP_REF_OF_OP, ARGI_REF_OF_OP, ACPI_TYPE_ANY, 245 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, 246 AML_FLAGS_EXEC_1A_0T_1R), 247 /* 1D */ ACPI_OP("Add", ARGP_ADD_OP, ARGI_ADD_OP, ACPI_TYPE_ANY, 248 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, 249 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), 250 /* 1E */ ACPI_OP("Concatenate", ARGP_CONCAT_OP, ARGI_CONCAT_OP, 251 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 252 AML_TYPE_EXEC_2A_1T_1R, 253 AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), 254 /* 1F */ ACPI_OP("Subtract", ARGP_SUBTRACT_OP, ARGI_SUBTRACT_OP, 255 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 256 AML_TYPE_EXEC_2A_1T_1R, 257 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), 258 /* 20 */ ACPI_OP("Increment", ARGP_INCREMENT_OP, ARGI_INCREMENT_OP, 259 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 260 AML_TYPE_EXEC_1A_0T_1R, 261 AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT), 262 /* 21 */ ACPI_OP("Decrement", ARGP_DECREMENT_OP, ARGI_DECREMENT_OP, 263 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 264 AML_TYPE_EXEC_1A_0T_1R, 265 AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT), 266 /* 22 */ ACPI_OP("Multiply", ARGP_MULTIPLY_OP, ARGI_MULTIPLY_OP, 267 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 268 AML_TYPE_EXEC_2A_1T_1R, 269 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), 270 /* 23 */ ACPI_OP("Divide", ARGP_DIVIDE_OP, ARGI_DIVIDE_OP, 271 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 272 AML_TYPE_EXEC_2A_2T_1R, 273 AML_FLAGS_EXEC_2A_2T_1R | AML_CONSTANT), 274 /* 24 */ ACPI_OP("ShiftLeft", ARGP_SHIFT_LEFT_OP, ARGI_SHIFT_LEFT_OP, 275 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 276 AML_TYPE_EXEC_2A_1T_1R, 277 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), 278 /* 25 */ ACPI_OP("ShiftRight", ARGP_SHIFT_RIGHT_OP, ARGI_SHIFT_RIGHT_OP, 279 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 280 AML_TYPE_EXEC_2A_1T_1R, 281 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), 282 /* 26 */ ACPI_OP("And", ARGP_BIT_AND_OP, ARGI_BIT_AND_OP, ACPI_TYPE_ANY, 283 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, 284 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), 285 /* 27 */ ACPI_OP("NAnd", ARGP_BIT_NAND_OP, ARGI_BIT_NAND_OP, 286 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 287 AML_TYPE_EXEC_2A_1T_1R, 288 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), 289 /* 28 */ ACPI_OP("Or", ARGP_BIT_OR_OP, ARGI_BIT_OR_OP, ACPI_TYPE_ANY, 290 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, 291 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), 292 /* 29 */ ACPI_OP("NOr", ARGP_BIT_NOR_OP, ARGI_BIT_NOR_OP, ACPI_TYPE_ANY, 293 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, 294 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), 295 /* 2A */ ACPI_OP("XOr", ARGP_BIT_XOR_OP, ARGI_BIT_XOR_OP, ACPI_TYPE_ANY, 296 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, 297 AML_FLAGS_EXEC_2A_1T_1R | AML_MATH | AML_CONSTANT), 298 /* 2B */ ACPI_OP("Not", ARGP_BIT_NOT_OP, ARGI_BIT_NOT_OP, ACPI_TYPE_ANY, 299 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, 300 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), 301 /* 2C */ ACPI_OP("FindSetLeftBit", ARGP_FIND_SET_LEFT_BIT_OP, 302 ARGI_FIND_SET_LEFT_BIT_OP, ACPI_TYPE_ANY, 303 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, 304 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), 305 /* 2D */ ACPI_OP("FindSetRightBit", ARGP_FIND_SET_RIGHT_BIT_OP, 306 ARGI_FIND_SET_RIGHT_BIT_OP, ACPI_TYPE_ANY, 307 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, 308 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), 309 /* 2E */ ACPI_OP("DerefOf", ARGP_DEREF_OF_OP, ARGI_DEREF_OF_OP, 310 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 311 AML_TYPE_EXEC_1A_0T_1R, AML_FLAGS_EXEC_1A_0T_1R), 312 /* 2F */ ACPI_OP("Notify", ARGP_NOTIFY_OP, ARGI_NOTIFY_OP, 313 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 314 AML_TYPE_EXEC_2A_0T_0R, AML_FLAGS_EXEC_2A_0T_0R), 315 /* 30 */ ACPI_OP("SizeOf", ARGP_SIZE_OF_OP, ARGI_SIZE_OF_OP, 316 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 317 AML_TYPE_EXEC_1A_0T_1R, 318 AML_FLAGS_EXEC_1A_0T_1R | AML_NO_OPERAND_RESOLVE), 319 /* 31 */ ACPI_OP("Index", ARGP_INDEX_OP, ARGI_INDEX_OP, ACPI_TYPE_ANY, 320 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, 321 AML_FLAGS_EXEC_2A_1T_1R), 322 /* 32 */ ACPI_OP("Match", ARGP_MATCH_OP, ARGI_MATCH_OP, ACPI_TYPE_ANY, 323 AML_CLASS_EXECUTE, AML_TYPE_EXEC_6A_0T_1R, 324 AML_FLAGS_EXEC_6A_0T_1R | AML_CONSTANT), 325 /* 33 */ ACPI_OP("CreateDWordField", ARGP_CREATE_DWORD_FIELD_OP, 326 ARGI_CREATE_DWORD_FIELD_OP, 327 ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, 328 AML_TYPE_CREATE_FIELD, 329 AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | 330 AML_DEFER | AML_CREATE), 331 /* 34 */ ACPI_OP("CreateWordField", ARGP_CREATE_WORD_FIELD_OP, 332 ARGI_CREATE_WORD_FIELD_OP, 333 ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, 334 AML_TYPE_CREATE_FIELD, 335 AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | 336 AML_DEFER | AML_CREATE), 337 /* 35 */ ACPI_OP("CreateByteField", ARGP_CREATE_BYTE_FIELD_OP, 338 ARGI_CREATE_BYTE_FIELD_OP, 339 ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, 340 AML_TYPE_CREATE_FIELD, 341 AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | 342 AML_DEFER | AML_CREATE), 343 /* 36 */ ACPI_OP("CreateBitField", ARGP_CREATE_BIT_FIELD_OP, 344 ARGI_CREATE_BIT_FIELD_OP, 345 ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, 346 AML_TYPE_CREATE_FIELD, 347 AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | 348 AML_DEFER | AML_CREATE), 349 /* 37 */ ACPI_OP("ObjectType", ARGP_OBJECT_TYPE_OP, ARGI_OBJECT_TYPE_OP, 350 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 351 AML_TYPE_EXEC_1A_0T_1R, 352 AML_FLAGS_EXEC_1A_0T_1R | AML_NO_OPERAND_RESOLVE), 353 /* 38 */ ACPI_OP("LAnd", ARGP_LAND_OP, ARGI_LAND_OP, ACPI_TYPE_ANY, 354 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, 355 AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL_NUMERIC | 356 AML_CONSTANT), 357 /* 39 */ ACPI_OP("LOr", ARGP_LOR_OP, ARGI_LOR_OP, ACPI_TYPE_ANY, 358 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, 359 AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL_NUMERIC | 360 AML_CONSTANT), 361 /* 3A */ ACPI_OP("LNot", ARGP_LNOT_OP, ARGI_LNOT_OP, ACPI_TYPE_ANY, 362 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_1R, 363 AML_FLAGS_EXEC_1A_0T_1R | AML_CONSTANT), 364 /* 3B */ ACPI_OP("LEqual", ARGP_LEQUAL_OP, ARGI_LEQUAL_OP, 365 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 366 AML_TYPE_EXEC_2A_0T_1R, 367 AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT), 368 /* 3C */ ACPI_OP("LGreater", ARGP_LGREATER_OP, ARGI_LGREATER_OP, 369 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 370 AML_TYPE_EXEC_2A_0T_1R, 371 AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT), 372 /* 3D */ ACPI_OP("LLess", ARGP_LLESS_OP, ARGI_LLESS_OP, ACPI_TYPE_ANY, 373 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, 374 AML_FLAGS_EXEC_2A_0T_1R | AML_LOGICAL | AML_CONSTANT), 375 /* 3E */ ACPI_OP("If", ARGP_IF_OP, ARGI_IF_OP, ACPI_TYPE_ANY, 376 AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS), 377 /* 3F */ ACPI_OP("Else", ARGP_ELSE_OP, ARGI_ELSE_OP, ACPI_TYPE_ANY, 378 AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS), 379 /* 40 */ ACPI_OP("While", ARGP_WHILE_OP, ARGI_WHILE_OP, ACPI_TYPE_ANY, 380 AML_CLASS_CONTROL, AML_TYPE_CONTROL, AML_HAS_ARGS), 381 /* 41 */ ACPI_OP("Noop", ARGP_NOOP_OP, ARGI_NOOP_OP, ACPI_TYPE_ANY, 382 AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), 383 /* 42 */ ACPI_OP("Return", ARGP_RETURN_OP, ARGI_RETURN_OP, 384 ACPI_TYPE_ANY, AML_CLASS_CONTROL, 385 AML_TYPE_CONTROL, AML_HAS_ARGS), 386 /* 43 */ ACPI_OP("Break", ARGP_BREAK_OP, ARGI_BREAK_OP, ACPI_TYPE_ANY, 387 AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), 388 /* 44 */ ACPI_OP("BreakPoint", ARGP_BREAK_POINT_OP, ARGI_BREAK_POINT_OP, 389 ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), 390 /* 45 */ ACPI_OP("Ones", ARGP_ONES_OP, ARGI_ONES_OP, ACPI_TYPE_INTEGER, 391 AML_CLASS_ARGUMENT, AML_TYPE_CONSTANT, AML_CONSTANT), 392 393 /* Prefixed opcodes (Two-byte opcodes with a prefix op) */ 394 395 /* 46 */ ACPI_OP("Mutex", ARGP_MUTEX_OP, ARGI_MUTEX_OP, ACPI_TYPE_MUTEX, 396 AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, 397 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | 398 AML_NSNODE | AML_NAMED), 399 /* 47 */ ACPI_OP("Event", ARGP_EVENT_OP, ARGI_EVENT_OP, ACPI_TYPE_EVENT, 400 AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_SIMPLE, 401 AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), 402 /* 48 */ ACPI_OP("CondRefOf", ARGP_COND_REF_OF_OP, ARGI_COND_REF_OF_OP, 403 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 404 AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), 405 /* 49 */ ACPI_OP("CreateField", ARGP_CREATE_FIELD_OP, 406 ARGI_CREATE_FIELD_OP, ACPI_TYPE_BUFFER_FIELD, 407 AML_CLASS_CREATE, AML_TYPE_CREATE_FIELD, 408 AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | 409 AML_DEFER | AML_FIELD | AML_CREATE), 410 /* 4A */ ACPI_OP("Load", ARGP_LOAD_OP, ARGI_LOAD_OP, ACPI_TYPE_ANY, 411 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_0R, 412 AML_FLAGS_EXEC_1A_1T_0R), 413 /* 4B */ ACPI_OP("Stall", ARGP_STALL_OP, ARGI_STALL_OP, ACPI_TYPE_ANY, 414 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, 415 AML_FLAGS_EXEC_1A_0T_0R), 416 /* 4C */ ACPI_OP("Sleep", ARGP_SLEEP_OP, ARGI_SLEEP_OP, ACPI_TYPE_ANY, 417 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, 418 AML_FLAGS_EXEC_1A_0T_0R), 419 /* 4D */ ACPI_OP("Acquire", ARGP_ACQUIRE_OP, ARGI_ACQUIRE_OP, 420 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 421 AML_TYPE_EXEC_2A_0T_1R, AML_FLAGS_EXEC_2A_0T_1R), 422 /* 4E */ ACPI_OP("Signal", ARGP_SIGNAL_OP, ARGI_SIGNAL_OP, 423 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 424 AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), 425 /* 4F */ ACPI_OP("Wait", ARGP_WAIT_OP, ARGI_WAIT_OP, ACPI_TYPE_ANY, 426 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_0T_1R, 427 AML_FLAGS_EXEC_2A_0T_1R), 428 /* 50 */ ACPI_OP("Reset", ARGP_RESET_OP, ARGI_RESET_OP, ACPI_TYPE_ANY, 429 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_0T_0R, 430 AML_FLAGS_EXEC_1A_0T_0R), 431 /* 51 */ ACPI_OP("Release", ARGP_RELEASE_OP, ARGI_RELEASE_OP, 432 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 433 AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), 434 /* 52 */ ACPI_OP("FromBCD", ARGP_FROM_BCD_OP, ARGI_FROM_BCD_OP, 435 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 436 AML_TYPE_EXEC_1A_1T_1R, 437 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), 438 /* 53 */ ACPI_OP("ToBCD", ARGP_TO_BCD_OP, ARGI_TO_BCD_OP, ACPI_TYPE_ANY, 439 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, 440 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), 441 /* 54 */ ACPI_OP("Unload", ARGP_UNLOAD_OP, ARGI_UNLOAD_OP, 442 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 443 AML_TYPE_EXEC_1A_0T_0R, AML_FLAGS_EXEC_1A_0T_0R), 444 /* 55 */ ACPI_OP("Revision", ARGP_REVISION_OP, ARGI_REVISION_OP, 445 ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, 446 AML_TYPE_CONSTANT, 0), 447 /* 56 */ ACPI_OP("Debug", ARGP_DEBUG_OP, ARGI_DEBUG_OP, 448 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 449 AML_TYPE_CONSTANT, 0), 450 /* 57 */ ACPI_OP("Fatal", ARGP_FATAL_OP, ARGI_FATAL_OP, ACPI_TYPE_ANY, 451 AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_0T_0R, 452 AML_FLAGS_EXEC_3A_0T_0R), 453 /* 58 */ ACPI_OP("OperationRegion", ARGP_REGION_OP, ARGI_REGION_OP, 454 ACPI_TYPE_REGION, AML_CLASS_NAMED_OBJECT, 455 AML_TYPE_NAMED_COMPLEX, 456 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | 457 AML_NSNODE | AML_NAMED | AML_DEFER), 458 /* 59 */ ACPI_OP("Field", ARGP_FIELD_OP, ARGI_FIELD_OP, ACPI_TYPE_ANY, 459 AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, 460 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | 461 AML_FIELD), 462 /* 5A */ ACPI_OP("Device", ARGP_DEVICE_OP, ARGI_DEVICE_OP, 463 ACPI_TYPE_DEVICE, AML_CLASS_NAMED_OBJECT, 464 AML_TYPE_NAMED_NO_OBJ, 465 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | 466 AML_NSNODE | AML_NAMED), 467 /* 5B */ ACPI_OP("Processor", ARGP_PROCESSOR_OP, ARGI_PROCESSOR_OP, 468 ACPI_TYPE_PROCESSOR, AML_CLASS_NAMED_OBJECT, 469 AML_TYPE_NAMED_SIMPLE, 470 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | 471 AML_NSNODE | AML_NAMED), 472 /* 5C */ ACPI_OP("PowerResource", ARGP_POWER_RES_OP, ARGI_POWER_RES_OP, 473 ACPI_TYPE_POWER, AML_CLASS_NAMED_OBJECT, 474 AML_TYPE_NAMED_SIMPLE, 475 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | 476 AML_NSNODE | AML_NAMED), 477 /* 5D */ ACPI_OP("ThermalZone", ARGP_THERMAL_ZONE_OP, 478 ARGI_THERMAL_ZONE_OP, ACPI_TYPE_THERMAL, 479 AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_NO_OBJ, 480 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | 481 AML_NSNODE | AML_NAMED), 482 /* 5E */ ACPI_OP("IndexField", ARGP_INDEX_FIELD_OP, ARGI_INDEX_FIELD_OP, 483 ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, 484 AML_TYPE_NAMED_FIELD, 485 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | 486 AML_FIELD), 487 /* 5F */ ACPI_OP("BankField", ARGP_BANK_FIELD_OP, ARGI_BANK_FIELD_OP, 488 ACPI_TYPE_LOCAL_BANK_FIELD, 489 AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_FIELD, 490 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | 491 AML_FIELD | AML_DEFER), 492 493 /* Internal opcodes that map to invalid AML opcodes */ 494 495 /* 60 */ ACPI_OP("LNotEqual", ARGP_LNOTEQUAL_OP, ARGI_LNOTEQUAL_OP, 496 ACPI_TYPE_ANY, AML_CLASS_INTERNAL, 497 AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT), 498 /* 61 */ ACPI_OP("LLessEqual", ARGP_LLESSEQUAL_OP, ARGI_LLESSEQUAL_OP, 499 ACPI_TYPE_ANY, AML_CLASS_INTERNAL, 500 AML_TYPE_BOGUS, AML_HAS_ARGS | AML_CONSTANT), 501 /* 62 */ ACPI_OP("LGreaterEqual", ARGP_LGREATEREQUAL_OP, 502 ARGI_LGREATEREQUAL_OP, ACPI_TYPE_ANY, 503 AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 504 AML_HAS_ARGS | AML_CONSTANT), 505 /* 63 */ ACPI_OP("-NamePath-", ARGP_NAMEPATH_OP, ARGI_NAMEPATH_OP, 506 ACPI_TYPE_LOCAL_REFERENCE, AML_CLASS_ARGUMENT, 507 AML_TYPE_LITERAL, AML_NSOBJECT | AML_NSNODE), 508 /* 64 */ ACPI_OP("-MethodCall-", ARGP_METHODCALL_OP, ARGI_METHODCALL_OP, 509 ACPI_TYPE_METHOD, AML_CLASS_METHOD_CALL, 510 AML_TYPE_METHOD_CALL, 511 AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE), 512 /* 65 */ ACPI_OP("-ByteList-", ARGP_BYTELIST_OP, ARGI_BYTELIST_OP, 513 ACPI_TYPE_ANY, AML_CLASS_ARGUMENT, 514 AML_TYPE_LITERAL, 0), 515 /* 66 */ ACPI_OP("-ReservedField-", ARGP_RESERVEDFIELD_OP, 516 ARGI_RESERVEDFIELD_OP, ACPI_TYPE_ANY, 517 AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0), 518 /* 67 */ ACPI_OP("-NamedField-", ARGP_NAMEDFIELD_OP, ARGI_NAMEDFIELD_OP, 519 ACPI_TYPE_ANY, AML_CLASS_INTERNAL, 520 AML_TYPE_BOGUS, 521 AML_NSOBJECT | AML_NSOPCODE | AML_NSNODE | AML_NAMED), 522 /* 68 */ ACPI_OP("-AccessField-", ARGP_ACCESSFIELD_OP, 523 ARGI_ACCESSFIELD_OP, ACPI_TYPE_ANY, 524 AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0), 525 /* 69 */ ACPI_OP("-StaticString", ARGP_STATICSTRING_OP, 526 ARGI_STATICSTRING_OP, ACPI_TYPE_ANY, 527 AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0), 528 /* 6A */ ACPI_OP("-Return Value-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, 529 AML_CLASS_RETURN_VALUE, AML_TYPE_RETURN, 530 AML_HAS_ARGS | AML_HAS_RETVAL), 531 /* 6B */ ACPI_OP("-UNKNOWN_OP-", ARG_NONE, ARG_NONE, ACPI_TYPE_INVALID, 532 AML_CLASS_UNKNOWN, AML_TYPE_BOGUS, AML_HAS_ARGS), 533 /* 6C */ ACPI_OP("-ASCII_ONLY-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, 534 AML_CLASS_ASCII, AML_TYPE_BOGUS, AML_HAS_ARGS), 535 /* 6D */ ACPI_OP("-PREFIX_ONLY-", ARG_NONE, ARG_NONE, ACPI_TYPE_ANY, 536 AML_CLASS_PREFIX, AML_TYPE_BOGUS, AML_HAS_ARGS), 537 538 /* ACPI 2.0 opcodes */ 539 540 /* 6E */ ACPI_OP("QwordConst", ARGP_QWORD_OP, ARGI_QWORD_OP, 541 ACPI_TYPE_INTEGER, AML_CLASS_ARGUMENT, 542 AML_TYPE_LITERAL, AML_CONSTANT), 543 /* 6F */ ACPI_OP("Package", /* Var */ ARGP_VAR_PACKAGE_OP, 544 ARGI_VAR_PACKAGE_OP, ACPI_TYPE_PACKAGE, 545 AML_CLASS_CREATE, AML_TYPE_CREATE_OBJECT, 546 AML_HAS_ARGS | AML_DEFER), 547 /* 70 */ ACPI_OP("ConcatenateResTemplate", ARGP_CONCAT_RES_OP, 548 ARGI_CONCAT_RES_OP, ACPI_TYPE_ANY, 549 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, 550 AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), 551 /* 71 */ ACPI_OP("Mod", ARGP_MOD_OP, ARGI_MOD_OP, ACPI_TYPE_ANY, 552 AML_CLASS_EXECUTE, AML_TYPE_EXEC_2A_1T_1R, 553 AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), 554 /* 72 */ ACPI_OP("CreateQWordField", ARGP_CREATE_QWORD_FIELD_OP, 555 ARGI_CREATE_QWORD_FIELD_OP, 556 ACPI_TYPE_BUFFER_FIELD, AML_CLASS_CREATE, 557 AML_TYPE_CREATE_FIELD, 558 AML_HAS_ARGS | AML_NSOBJECT | AML_NSNODE | 559 AML_DEFER | AML_CREATE), 560 /* 73 */ ACPI_OP("ToBuffer", ARGP_TO_BUFFER_OP, ARGI_TO_BUFFER_OP, 561 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 562 AML_TYPE_EXEC_1A_1T_1R, 563 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), 564 /* 74 */ ACPI_OP("ToDecimalString", ARGP_TO_DEC_STR_OP, 565 ARGI_TO_DEC_STR_OP, ACPI_TYPE_ANY, 566 AML_CLASS_EXECUTE, AML_TYPE_EXEC_1A_1T_1R, 567 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), 568 /* 75 */ ACPI_OP("ToHexString", ARGP_TO_HEX_STR_OP, ARGI_TO_HEX_STR_OP, 569 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 570 AML_TYPE_EXEC_1A_1T_1R, 571 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), 572 /* 76 */ ACPI_OP("ToInteger", ARGP_TO_INTEGER_OP, ARGI_TO_INTEGER_OP, 573 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 574 AML_TYPE_EXEC_1A_1T_1R, 575 AML_FLAGS_EXEC_1A_1T_1R | AML_CONSTANT), 576 /* 77 */ ACPI_OP("ToString", ARGP_TO_STRING_OP, ARGI_TO_STRING_OP, 577 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 578 AML_TYPE_EXEC_2A_1T_1R, 579 AML_FLAGS_EXEC_2A_1T_1R | AML_CONSTANT), 580 /* 78 */ ACPI_OP("CopyObject", ARGP_COPY_OP, ARGI_COPY_OP, 581 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 582 AML_TYPE_EXEC_1A_1T_1R, AML_FLAGS_EXEC_1A_1T_1R), 583 /* 79 */ ACPI_OP("Mid", ARGP_MID_OP, ARGI_MID_OP, ACPI_TYPE_ANY, 584 AML_CLASS_EXECUTE, AML_TYPE_EXEC_3A_1T_1R, 585 AML_FLAGS_EXEC_3A_1T_1R | AML_CONSTANT), 586 /* 7A */ ACPI_OP("Continue", ARGP_CONTINUE_OP, ARGI_CONTINUE_OP, 587 ACPI_TYPE_ANY, AML_CLASS_CONTROL, AML_TYPE_CONTROL, 0), 588 /* 7B */ ACPI_OP("LoadTable", ARGP_LOAD_TABLE_OP, ARGI_LOAD_TABLE_OP, 589 ACPI_TYPE_ANY, AML_CLASS_EXECUTE, 590 AML_TYPE_EXEC_6A_0T_1R, AML_FLAGS_EXEC_6A_0T_1R), 591 /* 7C */ ACPI_OP("DataTableRegion", ARGP_DATA_REGION_OP, 592 ARGI_DATA_REGION_OP, ACPI_TYPE_REGION, 593 AML_CLASS_NAMED_OBJECT, AML_TYPE_NAMED_COMPLEX, 594 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | 595 AML_NSNODE | AML_NAMED | AML_DEFER), 596 /* 7D */ ACPI_OP("[EvalSubTree]", ARGP_SCOPE_OP, ARGI_SCOPE_OP, 597 ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, 598 AML_TYPE_NAMED_NO_OBJ, 599 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | 600 AML_NSNODE), 601 602 /* ACPI 3.0 opcodes */ 603 604 /* 7E */ ACPI_OP("Timer", ARGP_TIMER_OP, ARGI_TIMER_OP, ACPI_TYPE_ANY, 605 AML_CLASS_EXECUTE, AML_TYPE_EXEC_0A_0T_1R, 606 AML_FLAGS_EXEC_0A_0T_1R | AML_NO_OPERAND_RESOLVE), 607 608 /* ACPI 5.0 opcodes */ 609 610 /* 7F */ ACPI_OP("-ConnectField-", ARGP_CONNECTFIELD_OP, 611 ARGI_CONNECTFIELD_OP, ACPI_TYPE_ANY, 612 AML_CLASS_INTERNAL, AML_TYPE_BOGUS, AML_HAS_ARGS), 613 /* 80 */ ACPI_OP("-ExtAccessField-", ARGP_CONNECTFIELD_OP, 614 ARGI_CONNECTFIELD_OP, ACPI_TYPE_ANY, 615 AML_CLASS_INTERNAL, AML_TYPE_BOGUS, 0), 616 617 /* ACPI 6.0 opcodes */ 618 619 /* 81 */ ACPI_OP("External", ARGP_EXTERNAL_OP, ARGI_EXTERNAL_OP, 620 ACPI_TYPE_ANY, AML_CLASS_NAMED_OBJECT, 621 AML_TYPE_NAMED_SIMPLE, 622 AML_HAS_ARGS | AML_NSOBJECT | AML_NSOPCODE | 623 AML_NSNODE | AML_NAMED), 624 /* 82 */ ACPI_OP("Comment", ARGP_COMMENT_OP, ARGI_COMMENT_OP, 625 ACPI_TYPE_STRING, AML_CLASS_ARGUMENT, 626 AML_TYPE_LITERAL, AML_CONSTANT) 627 628 /*! [End] no source code translation !*/ 629 }; 630