Newer
Older
SMP_fprintf(OutFile, " %ld", (long) Opnd->GetImmedValue());
}
else if ((Opnd->IsFarPointer()) || (Opnd->IsNearPointer())) {
SMP_fprintf(OutFile, " %llx", (unsigned long long) Opnd->GetAddr());
}
else {
clc5q
committed
SMP_fprintf(OutFile, " ERROROP");
}
return;
} // end of AnnotPrintOperand()
// Print opcode string.
void PrintOpcode(uint16_t opcode, FILE *OutFile) {
switch (opcode) {
case STARS_NN_null: // Unknown Operation
case STARS_NN_aaa: // ASCII Adjust after Addition
case STARS_NN_aad: // ASCII Adjust AX before Division
case STARS_NN_aam: // ASCII Adjust AX after Multiply
case STARS_NN_aas: // ASCII Adjust AL after Subtraction
case STARS_NN_adc: // Add with Carry
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_add: // Add
SMP_fprintf(OutFile, "add");
break;
case STARS_NN_and: // Logical AND
SMP_fprintf(OutFile, "and");
break;
case STARS_NN_arpl: // Adjust RPL Field of Selector
case STARS_NN_bound: // Check Array Index Against Bounds
case STARS_NN_bsf: // Bit Scan Forward
case STARS_NN_bsr: // Bit Scan Reverse
case STARS_NN_bt: // Bit Test
case STARS_NN_btc: // Bit Test and Complement
case STARS_NN_btr: // Bit Test and Reset
case STARS_NN_bts: // Bit Test and Set
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_call: // Call Procedure
case STARS_NN_callfi: // Indirect Call Far Procedure
case STARS_NN_callni: // Indirect Call Near Procedure
SMP_fprintf(OutFile, "");
break;
case STARS_NN_cbw: // AL -> AX (with sign)
case STARS_NN_cwde: // AX -> EAX (with sign)
case STARS_NN_cdqe: // EAX -> RAX (with sign)
case STARS_NN_clc: // Clear Carry Flag
case STARS_NN_cld: // Clear Direction Flag
case STARS_NN_cli: // Clear Interrupt Flag
case STARS_NN_clts: // Clear Task-Switched Flag in CR0
case STARS_NN_cmc: // Complement Carry Flag
case STARS_NN_cmp: // Compare Two Operands
case STARS_NN_cmps: // Compare Strings
case STARS_NN_cwd: // AX -> DX:AX (with sign)
case STARS_NN_cdq: // EAX -> EDX:EAX (with sign)
case STARS_NN_cqo: // RAX -> RDX:RAX (with sign)
case STARS_NN_daa: // Decimal Adjust AL after Addition
case STARS_NN_das: // Decimal Adjust AL after Subtraction
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_dec: // Decrement by 1
SMP_fprintf(OutFile, "sub");
break;
case STARS_NN_div: // Unsigned Divide
SMP_fprintf(OutFile, "div");
break;
case STARS_NN_enterw: // Make Stack Frame for Procedure Parameters
case STARS_NN_enter: // Make Stack Frame for Procedure Parameters
case STARS_NN_enterd: // Make Stack Frame for Procedure Parameters
case STARS_NN_enterq: // Make Stack Frame for Procedure Parameters
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_hlt: // Halt
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_idiv: // Signed Divide
SMP_fprintf(OutFile, "div");
break;
case STARS_NN_imul: // Signed Multiply
SMP_fprintf(OutFile, "mul");
break;
case STARS_NN_in: // Input from Port
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_inc: // Increment by 1
SMP_fprintf(OutFile, "add");
break;
case STARS_NN_ins: // Input Byte(s) from Port to String
case STARS_NN_int: // Call to Interrupt Procedure
case STARS_NN_into: // Call to Interrupt Procedure if Overflow Flag = 1
case STARS_NN_int3: // Trap to Debugger
case STARS_NN_iretw: // Interrupt Return
case STARS_NN_iret: // Interrupt Return
case STARS_NN_iretd: // Interrupt Return (use32)
case STARS_NN_iretq: // Interrupt Return (use64)
SMP_fprintf(OutFile, "ERROR");
break;
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
case STARS_NN_ja: // Jump if Above (CF=0 & ZF=0)
case STARS_NN_jae: // Jump if Above or Equal (CF=0)
case STARS_NN_jb: // Jump if Below (CF=1)
case STARS_NN_jbe: // Jump if Below or Equal (CF=1 | ZF=1)
case STARS_NN_jc: // Jump if Carry (CF=1)
case STARS_NN_jcxz: // Jump if CX is 0
case STARS_NN_jecxz: // Jump if ECX is 0
case STARS_NN_jrcxz: // Jump if RCX is 0
case STARS_NN_je: // Jump if Equal (ZF=1)
case STARS_NN_jg: // Jump if Greater (ZF=0 & SF=OF)
case STARS_NN_jge: // Jump if Greater or Equal (SF=OF)
case STARS_NN_jl: // Jump if Less (SF!=OF)
case STARS_NN_jle: // Jump if Less or Equal (ZF=1 | SF!=OF)
case STARS_NN_jna: // Jump if Not Above (CF=1 | ZF=1)
case STARS_NN_jnae: // Jump if Not Above or Equal (CF=1)
case STARS_NN_jnb: // Jump if Not Below (CF=0)
case STARS_NN_jnbe: // Jump if Not Below or Equal (CF=0 & ZF=0)
case STARS_NN_jnc: // Jump if Not Carry (CF=0)
case STARS_NN_jne: // Jump if Not Equal (ZF=0)
case STARS_NN_jng: // Jump if Not Greater (ZF=1 | SF!=OF)
case STARS_NN_jnge: // Jump if Not Greater or Equal (ZF=1)
case STARS_NN_jnl: // Jump if Not Less (SF=OF)
case STARS_NN_jnle: // Jump if Not Less or Equal (ZF=0 & SF=OF)
case STARS_NN_jno: // Jump if Not Overflow (OF=0)
case STARS_NN_jnp: // Jump if Not Parity (PF=0)
case STARS_NN_jns: // Jump if Not Sign (SF=0)
case STARS_NN_jnz: // Jump if Not Zero (ZF=0)
case STARS_NN_jo: // Jump if Overflow (OF=1)
case STARS_NN_jp: // Jump if Parity (PF=1)
case STARS_NN_jpe: // Jump if Parity Even (PF=1)
case STARS_NN_jpo: // Jump if Parity Odd (PF=0)
case STARS_NN_js: // Jump if Sign (SF=1)
case STARS_NN_jz: // Jump if Zero (ZF=1)
case STARS_NN_jmp: // Jump
case STARS_NN_jmpfi: // Indirect Far Jump
case STARS_NN_jmpni: // Indirect Near Jump
case STARS_NN_jmpshort: // Jump Short (not used)
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_lahf: // Load Flags into AH Register
case STARS_NN_lar: // Load Access Right Byte
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_lea: // Load Effective Address
SMP_fprintf(OutFile, "lea");
break;
case STARS_NN_leavew: // High Level Procedure Exit
case STARS_NN_leave: // High Level Procedure Exit
case STARS_NN_leaved: // High Level Procedure Exit
case STARS_NN_leaveq: // High Level Procedure Exit
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_lgdt: // Load Global Descriptor Table Register
case STARS_NN_lidt: // Load Interrupt Descriptor Table Register
case STARS_NN_lgs: // Load Full Pointer to GS:xx
case STARS_NN_lss: // Load Full Pointer to SS:xx
case STARS_NN_lds: // Load Full Pointer to DS:xx
case STARS_NN_les: // Load Full Pointer to ES:xx
case STARS_NN_lfs: // Load Full Pointer to FS:xx
case STARS_NN_lldt: // Load Local Descriptor Table Register
case STARS_NN_lmsw: // Load Machine Status Word
case STARS_NN_lock: // Assert LOCK# Signal Prefix
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_lods: // Load String
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_loopw: // Loop while ECX != 0
case STARS_NN_loop: // Loop while CX != 0
case STARS_NN_loopd: // Loop while ECX != 0
case STARS_NN_loopq: // Loop while RCX != 0
case STARS_NN_loopwe: // Loop while CX != 0 and ZF=1
case STARS_NN_loope: // Loop while rCX != 0 and ZF=1
case STARS_NN_loopde: // Loop while ECX != 0 and ZF=1
case STARS_NN_loopqe: // Loop while RCX != 0 and ZF=1
case STARS_NN_loopwne: // Loop while CX != 0 and ZF=0
case STARS_NN_loopne: // Loop while rCX != 0 and ZF=0
case STARS_NN_loopdne: // Loop while ECX != 0 and ZF=0
case STARS_NN_loopqne: // Loop while RCX != 0 and ZF=0
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_lsl: // Load Segment Limit
case STARS_NN_ltr: // Load Task Register
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_mov: // Move Data
SMP_fprintf(OutFile, "mov");
break;
case STARS_NN_movsp: // Move to/from Special Registers
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_movs: // Move Byte(s) from String to String
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_movsx: // Move with Sign-Extend
SMP_fprintf(OutFile, "movsx");
break;
case STARS_NN_movzx: // Move with Zero-Extend
SMP_fprintf(OutFile, "movzx");
break;
case STARS_NN_mul: // Unsigned Multiplication of AL or AX
SMP_fprintf(OutFile, "mul");
break;
case STARS_NN_neg: // Two's Complement Negation
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_nop: // No Operation
SMP_fprintf(OutFile, "");
break;
case STARS_NN_not: // One's Complement Negation
SMP_fprintf(OutFile, "not");
break;
case STARS_NN_or: // Logical Inclusive OR
SMP_fprintf(OutFile, "or");
break;
case STARS_NN_out: // Output to Port
case STARS_NN_outs: // Output Byte(s) to Port
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_pop: // Pop a word from the Stack
SMP_fprintf(OutFile, "pop");
break;
case STARS_NN_popaw: // Pop all General Registers
case STARS_NN_popa: // Pop all General Registers
case STARS_NN_popad: // Pop all General Registers (use32)
case STARS_NN_popaq: // Pop all General Registers (use64)
case STARS_NN_popfw: // Pop Stack into Flags Register
case STARS_NN_popf: // Pop Stack into Flags Register
case STARS_NN_popfd: // Pop Stack into Eflags Register
case STARS_NN_popfq: // Pop Stack into Rflags Register
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_push: // Push Operand onto the Stack
SMP_fprintf(OutFile, "push");
break;
case STARS_NN_pushaw: // Push all General Registers
case STARS_NN_pusha: // Push all General Registers
case STARS_NN_pushad: // Push all General Registers (use32)
case STARS_NN_pushaq: // Push all General Registers (use64)
case STARS_NN_pushfw: // Push Flags Register onto the Stack
case STARS_NN_pushf: // Push Flags Register onto the Stack
case STARS_NN_pushfd: // Push Flags Register onto the Stack (use32)
case STARS_NN_pushfq: // Push Flags Register onto the Stack (use64)
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_rcl: // Rotate Through Carry Left
case STARS_NN_rcr: // Rotate Through Carry Right
case STARS_NN_rol: // Rotate Left
case STARS_NN_ror: // Rotate Right
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_rep: // Repeat String Operation
case STARS_NN_repe: // Repeat String Operation while ZF=1
case STARS_NN_repne: // Repeat String Operation while ZF=0
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_retn: // Return Near from Procedure
case STARS_NN_retf: // Return Far from Procedure
SMP_fprintf(OutFile, "return");
break;
case STARS_NN_sahf: // Store AH into Flags Register
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_sal: // Shift Arithmetic Left
SMP_fprintf(OutFile, "sal");
break;
case STARS_NN_sar: // Shift Arithmetic Right
SMP_fprintf(OutFile, "sar");
break;
case STARS_NN_shl: // Shift Logical Left
SMP_fprintf(OutFile, "shl");
break;
case STARS_NN_shr: // Shift Logical Right
SMP_fprintf(OutFile, "shr");
break;
case STARS_NN_sbb: // Integer Subtraction with Borrow
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_scas: // Compare String
SMP_fprintf(OutFile, "ERROR");
break;
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
case STARS_NN_seta: // Set Byte if Above (CF=0 & ZF=0)
case STARS_NN_setae: // Set Byte if Above or Equal (CF=0)
case STARS_NN_setb: // Set Byte if Below (CF=1)
case STARS_NN_setbe: // Set Byte if Below or Equal (CF=1 | ZF=1)
case STARS_NN_setc: // Set Byte if Carry (CF=1)
case STARS_NN_sete: // Set Byte if Equal (ZF=1)
case STARS_NN_setg: // Set Byte if Greater (ZF=0 & SF=OF)
case STARS_NN_setge: // Set Byte if Greater or Equal (SF=OF)
case STARS_NN_setl: // Set Byte if Less (SF!=OF)
case STARS_NN_setle: // Set Byte if Less or Equal (ZF=1 | SF!=OF)
case STARS_NN_setna: // Set Byte if Not Above (CF=1 | ZF=1)
case STARS_NN_setnae: // Set Byte if Not Above or Equal (CF=1)
case STARS_NN_setnb: // Set Byte if Not Below (CF=0)
case STARS_NN_setnbe: // Set Byte if Not Below or Equal (CF=0 & ZF=0)
case STARS_NN_setnc: // Set Byte if Not Carry (CF=0)
case STARS_NN_setne: // Set Byte if Not Equal (ZF=0)
case STARS_NN_setng: // Set Byte if Not Greater (ZF=1 | SF!=OF)
case STARS_NN_setnge: // Set Byte if Not Greater or Equal (ZF=1)
case STARS_NN_setnl: // Set Byte if Not Less (SF=OF)
case STARS_NN_setnle: // Set Byte if Not Less or Equal (ZF=0 & SF=OF)
case STARS_NN_setno: // Set Byte if Not Overflow (OF=0)
case STARS_NN_setnp: // Set Byte if Not Parity (PF=0)
case STARS_NN_setns: // Set Byte if Not Sign (SF=0)
case STARS_NN_setnz: // Set Byte if Not Zero (ZF=0)
case STARS_NN_seto: // Set Byte if Overflow (OF=1)
case STARS_NN_setp: // Set Byte if Parity (PF=1)
case STARS_NN_setpe: // Set Byte if Parity Even (PF=1)
case STARS_NN_setpo: // Set Byte if Parity Odd (PF=0)
case STARS_NN_sets: // Set Byte if Sign (SF=1)
case STARS_NN_setz: // Set Byte if Zero (ZF=1)
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_sgdt: // Store Global Descriptor Table Register
case STARS_NN_sidt: // Store Interrupt Descriptor Table Register
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_shld: // Double Precision Shift Left
case STARS_NN_shrd: // Double Precision Shift Right
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_sldt: // Store Local Descriptor Table Register
case STARS_NN_smsw: // Store Machine Status Word
case STARS_NN_stc: // Set Carry Flag
case STARS_NN_std: // Set Direction Flag
case STARS_NN_sti: // Set Interrupt Flag
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_stos: // Store String
case STARS_NN_str: // Store Task Register
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_sub: // Integer Subtraction
SMP_fprintf(OutFile, "sub");
break;
case STARS_NN_test: // Logical Compare
SMP_fprintf(OutFile, "test");
break;
case STARS_NN_verr: // Verify a Segment for Reading
case STARS_NN_verw: // Verify a Segment for Writing
case STARS_NN_wait: // Wait until BUSY# Pin is Inactive (HIGH)
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_xchg: // Exchange Register/Memory with Register
case STARS_NN_xlat: // Table Lookup Translation
SMP_fprintf(OutFile, "ERROR");
break;
case STARS_NN_xor: // Logical Exclusive OR
SMP_fprintf(OutFile, "xor");
break;
//
// 486 instructions
//
case STARS_NN_cmpxchg: // Compare and Exchange
case STARS_NN_bswap: // Swap bits in EAX
case STARS_NN_xadd: // t<-dest; dest<-src+dest; src<-t
case STARS_NN_invd: // Invalidate Data Cache
case STARS_NN_wbinvd: // Invalidate Data Cache (write changes)
case STARS_NN_invlpg: // Invalidate TLB entry
SMP_fprintf(OutFile, "ERROR");
break;
//
// Pentium instructions
//
case STARS_NN_rdmsr: // Read Machine Status Register
case STARS_NN_wrmsr: // Write Machine Status Register
case STARS_NN_cpuid: // Get CPU ID
case STARS_NN_cmpxchg8b: // Compare and Exchange Eight Bytes
case STARS_NN_rdtsc: // Read Time Stamp Counter
case STARS_NN_rsm: // Resume from System Management Mode
SMP_fprintf(OutFile, "ERROR");
break;
//
// Pentium Pro instructions
//
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
case STARS_NN_cmova: // Move if Above (CF=0 & ZF=0)
case STARS_NN_cmovb: // Move if Below (CF=1)
case STARS_NN_cmovbe: // Move if Below or Equal (CF=1 | ZF=1)
case STARS_NN_cmovg: // Move if Greater (ZF=0 & SF=OF)
case STARS_NN_cmovge: // Move if Greater or Equal (SF=OF)
case STARS_NN_cmovl: // Move if Less (SF!=OF)
case STARS_NN_cmovle: // Move if Less or Equal (ZF=1 | SF!=OF)
case STARS_NN_cmovnb: // Move if Not Below (CF=0)
case STARS_NN_cmovno: // Move if Not Overflow (OF=0)
case STARS_NN_cmovnp: // Move if Not Parity (PF=0)
case STARS_NN_cmovns: // Move if Not Sign (SF=0)
case STARS_NN_cmovnz: // Move if Not Zero (ZF=0)
case STARS_NN_cmovo: // Move if Overflow (OF=1)
case STARS_NN_cmovp: // Move if Parity (PF=1)
case STARS_NN_cmovs: // Move if Sign (SF=1)
case STARS_NN_cmovz: // Move if Zero (ZF=1)
case STARS_NN_fcmovb: // Floating Move if Below
case STARS_NN_fcmove: // Floating Move if Equal
case STARS_NN_fcmovbe: // Floating Move if Below or Equal
case STARS_NN_fcmovu: // Floating Move if Unordered
case STARS_NN_fcmovnb: // Floating Move if Not Below
case STARS_NN_fcmovne: // Floating Move if Not Equal
case STARS_NN_fcmovnbe: // Floating Move if Not Below or Equal
case STARS_NN_fcmovnu: // Floating Move if Not Unordered
case STARS_NN_fcomi: // FP Compare, result in EFLAGS
case STARS_NN_fucomi: // FP Unordered Compare, result in EFLAGS
case STARS_NN_fcomip: // FP Compare, result in EFLAGS, pop stack
case STARS_NN_fucomip: // FP Unordered Compare, result in EFLAGS, pop stack
case STARS_NN_rdpmc: // Read Performance Monitor Counter
SMP_fprintf(OutFile, "ERROR");
break;
//
// FPP instructions
//
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
case STARS_NN_fld: // Load Real
case STARS_NN_fst: // Store Real
case STARS_NN_fstp: // Store Real and Pop
case STARS_NN_fxch: // Exchange Registers
case STARS_NN_fild: // Load Integer
case STARS_NN_fist: // Store Integer
case STARS_NN_fistp: // Store Integer and Pop
case STARS_NN_fbld: // Load BCD
case STARS_NN_fbstp: // Store BCD and Pop
case STARS_NN_fadd: // Add Real
case STARS_NN_faddp: // Add Real and Pop
case STARS_NN_fiadd: // Add Integer
case STARS_NN_fsub: // Subtract Real
case STARS_NN_fsubp: // Subtract Real and Pop
case STARS_NN_fisub: // Subtract Integer
case STARS_NN_fsubr: // Subtract Real Reversed
case STARS_NN_fsubrp: // Subtract Real Reversed and Pop
case STARS_NN_fisubr: // Subtract Integer Reversed
case STARS_NN_fmul: // Multiply Real
case STARS_NN_fmulp: // Multiply Real and Pop
case STARS_NN_fimul: // Multiply Integer
case STARS_NN_fdiv: // Divide Real
case STARS_NN_fdivp: // Divide Real and Pop
case STARS_NN_fidiv: // Divide Integer
case STARS_NN_fdivr: // Divide Real Reversed
case STARS_NN_fdivrp: // Divide Real Reversed and Pop
case STARS_NN_fidivr: // Divide Integer Reversed
case STARS_NN_fsqrt: // Square Root
case STARS_NN_fscale: // Scale: st(0) <- st(0) * 2^st(1)
case STARS_NN_fprem: // Partial Remainder
case STARS_NN_frndint: // Round to Integer
case STARS_NN_fxtract: // Extract exponent and significand
case STARS_NN_fabs: // Absolute value
case STARS_NN_fchs: // Change Sign
case STARS_NN_fcom: // Compare Real
case STARS_NN_fcomp: // Compare Real and Pop
case STARS_NN_fcompp: // Compare Real and Pop Twice
case STARS_NN_ficom: // Compare Integer
case STARS_NN_ficomp: // Compare Integer and Pop
case STARS_NN_ftst: // Test
case STARS_NN_fxam: // Examine
case STARS_NN_fptan: // Partial tangent
case STARS_NN_fpatan: // Partial arctangent
case STARS_NN_f2xm1: // 2^x - 1
case STARS_NN_fyl2x: // Y * lg2(X)
case STARS_NN_fyl2xp1: // Y * lg2(X+1)
case STARS_NN_fldz: // Load +0.0
case STARS_NN_fld1: // Load +1.0
case STARS_NN_fldpi: // Load PI=3.14...
case STARS_NN_fldl2t: // Load lg2(10)
case STARS_NN_fldl2e: // Load lg2(e)
case STARS_NN_fldlg2: // Load lg10(2)
case STARS_NN_fldln2: // Load ln(2)
case STARS_NN_finit: // Initialize Processor
case STARS_NN_fninit: // Initialize Processor (no wait)
case STARS_NN_fsetpm: // Set Protected Mode
case STARS_NN_fldcw: // Load Control Word
case STARS_NN_fstcw: // Store Control Word
case STARS_NN_fnstcw: // Store Control Word (no wait)
case STARS_NN_fstsw: // Store Status Word
case STARS_NN_fnstsw: // Store Status Word (no wait)
case STARS_NN_fclex: // Clear Exceptions
case STARS_NN_fnclex: // Clear Exceptions (no wait)
case STARS_NN_fstenv: // Store Environment
case STARS_NN_fnstenv: // Store Environment (no wait)
case STARS_NN_fldenv: // Load Environment
case STARS_NN_fsave: // Save State
case STARS_NN_fnsave: // Save State (no wait)
case STARS_NN_frstor: // Restore State
case STARS_NN_fincstp: // Increment Stack Pointer
case STARS_NN_fdecstp: // Decrement Stack Pointer
case STARS_NN_ffree: // Free Register
case STARS_NN_fnop: // No Operation
case STARS_NN_feni: // (8087 only)
case STARS_NN_fneni: // (no wait) (8087 only)
case STARS_NN_fdisi: // (8087 only)
case STARS_NN_fndisi: // (no wait) (8087 only)
SMP_fprintf(OutFile, "ERROR");
break;
//
// 80387 instructions
//
case STARS_NN_fprem1: // Partial Remainder ( < half )
case STARS_NN_fsincos: // t<-cos(st); st<-sin(st); push t
case STARS_NN_fsin: // Sine
case STARS_NN_fcos: // Cosine
case STARS_NN_fucom: // Compare Unordered Real
case STARS_NN_fucomp: // Compare Unordered Real and Pop
case STARS_NN_fucompp: // Compare Unordered Real and Pop Twice
SMP_fprintf(OutFile, "ERROR");
break;
//
// Instructions added 28.02.96
//
case STARS_NN_setalc: // Set AL to Carry Flag
case STARS_NN_svdc: // Save Register and Descriptor
case STARS_NN_rsdc: // Restore Register and Descriptor
case STARS_NN_svldt: // Save LDTR and Descriptor
case STARS_NN_rsldt: // Restore LDTR and Descriptor
case STARS_NN_svts: // Save TR and Descriptor
case STARS_NN_rsts: // Restore TR and Descriptor
case STARS_NN_icebp: // ICE Break Point
case STARS_NN_loadall: // Load the entire CPU state from ES:EDI
SMP_fprintf(OutFile, "ERROR");
break;
//
// MMX instructions
//
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
case STARS_NN_emms: // Empty MMX state
case STARS_NN_movd: // Move 32 bits
case STARS_NN_movq: // Move 64 bits
case STARS_NN_packsswb: // Pack with Signed Saturation (Word->Byte)
case STARS_NN_packssdw: // Pack with Signed Saturation (Dword->Word)
case STARS_NN_packuswb: // Pack with Unsigned Saturation (Word->Byte)
case STARS_NN_paddb: // Packed Add Byte
case STARS_NN_paddw: // Packed Add Word
case STARS_NN_paddd: // Packed Add Dword
case STARS_NN_paddsb: // Packed Add with Saturation (Byte)
case STARS_NN_paddsw: // Packed Add with Saturation (Word)
case STARS_NN_paddusb: // Packed Add Unsigned with Saturation (Byte)
case STARS_NN_paddusw: // Packed Add Unsigned with Saturation (Word)
case STARS_NN_pand: // Bitwise Logical And
case STARS_NN_pandn: // Bitwise Logical And Not
case STARS_NN_pcmpeqb: // Packed Compare for Equal (Byte)
case STARS_NN_pcmpeqw: // Packed Compare for Equal (Word)
case STARS_NN_pcmpeqd: // Packed Compare for Equal (Dword)
case STARS_NN_pcmpgtb: // Packed Compare for Greater Than (Byte)
case STARS_NN_pcmpgtw: // Packed Compare for Greater Than (Word)
case STARS_NN_pcmpgtd: // Packed Compare for Greater Than (Dword)
case STARS_NN_pmaddwd: // Packed Multiply and Add
case STARS_NN_pmulhw: // Packed Multiply High
case STARS_NN_pmullw: // Packed Multiply Low
case STARS_NN_por: // Bitwise Logical Or
case STARS_NN_psllw: // Packed Shift Left Logical (Word)
case STARS_NN_pslld: // Packed Shift Left Logical (Dword)
case STARS_NN_psllq: // Packed Shift Left Logical (Qword)
case STARS_NN_psraw: // Packed Shift Right Arithmetic (Word)
case STARS_NN_psrad: // Packed Shift Right Arithmetic (Dword)
case STARS_NN_psrlw: // Packed Shift Right Logical (Word)
case STARS_NN_psrld: // Packed Shift Right Logical (Dword)
case STARS_NN_psrlq: // Packed Shift Right Logical (Qword)
case STARS_NN_psubb: // Packed Subtract Byte
case STARS_NN_psubw: // Packed Subtract Word
case STARS_NN_psubd: // Packed Subtract Dword
case STARS_NN_psubsb: // Packed Subtract with Saturation (Byte)
case STARS_NN_psubsw: // Packed Subtract with Saturation (Word)
case STARS_NN_psubusb: // Packed Subtract Unsigned with Saturation (Byte)
case STARS_NN_psubusw: // Packed Subtract Unsigned with Saturation (Word)
case STARS_NN_punpckhbw: // Unpack High Packed Data (Byte->Word)
case STARS_NN_punpckhwd: // Unpack High Packed Data (Word->Dword)
case STARS_NN_punpckhdq: // Unpack High Packed Data (Dword->Qword)
case STARS_NN_punpcklbw: // Unpack Low Packed Data (Byte->Word)
case STARS_NN_punpcklwd: // Unpack Low Packed Data (Word->Dword)
case STARS_NN_punpckldq: // Unpack Low Packed Data (Dword->Qword)
case STARS_NN_pxor: // Bitwise Logical Exclusive Or
SMP_fprintf(OutFile, "ERROR");
break;
//
// Undocumented Deschutes processor instructions
//
case STARS_NN_fxsave: // Fast save FP context
case STARS_NN_fxrstor: // Fast restore FP context
SMP_fprintf(OutFile, "ERROR");
break;
// Pentium II instructions
case STARS_NN_sysenter: // Fast Transition to System Call Entry Point
case STARS_NN_sysexit: // Fast Transition from System Call Entry Point
SMP_fprintf(OutFile, "ERROR");
break;
// 3DNow! instructions
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
case STARS_NN_pavgusb: // Packed 8-bit Unsigned Integer Averaging
case STARS_NN_pfadd: // Packed Floating-Point Addition
case STARS_NN_pfsub: // Packed Floating-Point Subtraction
case STARS_NN_pfsubr: // Packed Floating-Point Reverse Subtraction
case STARS_NN_pfacc: // Packed Floating-Point Accumulate
case STARS_NN_pfcmpge: // Packed Floating-Point Comparison, Greater or Equal
case STARS_NN_pfcmpgt: // Packed Floating-Point Comparison, Greater
case STARS_NN_pfcmpeq: // Packed Floating-Point Comparison, Equal
case STARS_NN_pfmin: // Packed Floating-Point Minimum
case STARS_NN_pfmax: // Packed Floating-Point Maximum
case STARS_NN_pi2fd: // Packed 32-bit Integer to Floating-Point
case STARS_NN_pf2id: // Packed Floating-Point to 32-bit Integer
case STARS_NN_pfrcp: // Packed Floating-Point Reciprocal Approximation
case STARS_NN_pfrsqrt: // Packed Floating-Point Reciprocal Square Root Approximation
case STARS_NN_pfmul: // Packed Floating-Point Multiplication
case STARS_NN_pfrcpit1: // Packed Floating-Point Reciprocal First Iteration Step
case STARS_NN_pfrsqit1: // Packed Floating-Point Reciprocal Square Root First Iteration Step
case STARS_NN_pfrcpit2: // Packed Floating-Point Reciprocal Second Iteration Step
case STARS_NN_pmulhrw: // Packed Floating-Point 16-bit Integer Multiply with rounding
case STARS_NN_femms: // Faster entry/exit of the MMX or floating-point state
case STARS_NN_prefetch: // Prefetch at least a 32-byte line into L1 data cache
case STARS_NN_prefetchw: // Prefetch processor cache line into L1 data cache (mark as modified)
SMP_fprintf(OutFile, "ERROR");
break;
// Pentium III instructions
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
case STARS_NN_addps: // Packed Single-FP Add
case STARS_NN_addss: // Scalar Single-FP Add
case STARS_NN_andnps: // Bitwise Logical And Not for Single-FP
case STARS_NN_andps: // Bitwise Logical And for Single-FP
case STARS_NN_cmpps: // Packed Single-FP Compare
case STARS_NN_cmpss: // Scalar Single-FP Compare
case STARS_NN_comiss: // Scalar Ordered Single-FP Compare and Set EFLAGS
case STARS_NN_cvtpi2ps: // Packed signed INT32 to Packed Single-FP conversion
case STARS_NN_cvtps2pi: // Packed Single-FP to Packed INT32 conversion
case STARS_NN_cvtsi2ss: // Scalar signed INT32 to Single-FP conversion
case STARS_NN_cvtss2si: // Scalar Single-FP to signed INT32 conversion
case STARS_NN_cvttps2pi: // Packed Single-FP to Packed INT32 conversion (truncate)
case STARS_NN_cvttss2si: // Scalar Single-FP to signed INT32 conversion (truncate)
case STARS_NN_divps: // Packed Single-FP Divide
case STARS_NN_divss: // Scalar Single-FP Divide
case STARS_NN_ldmxcsr: // Load Streaming SIMD Extensions Technology Control/Status Register
case STARS_NN_maxps: // Packed Single-FP Maximum
case STARS_NN_maxss: // Scalar Single-FP Maximum
case STARS_NN_minps: // Packed Single-FP Minimum
case STARS_NN_minss: // Scalar Single-FP Minimum
case STARS_NN_movaps: // Move Aligned Four Packed Single-FP
case STARS_NN_movhlps: // Move High to Low Packed Single-FP
case STARS_NN_movhps: // Move High Packed Single-FP
case STARS_NN_movlhps: // Move Low to High Packed Single-FP
case STARS_NN_movlps: // Move Low Packed Single-FP
case STARS_NN_movmskps: // Move Mask to Register
case STARS_NN_movss: // Move Scalar Single-FP
case STARS_NN_movups: // Move Unaligned Four Packed Single-FP
case STARS_NN_mulps: // Packed Single-FP Multiply
case STARS_NN_mulss: // Scalar Single-FP Multiply
case STARS_NN_orps: // Bitwise Logical OR for Single-FP Data
case STARS_NN_rcpps: // Packed Single-FP Reciprocal
case STARS_NN_rcpss: // Scalar Single-FP Reciprocal
case STARS_NN_rsqrtps: // Packed Single-FP Square Root Reciprocal
case STARS_NN_rsqrtss: // Scalar Single-FP Square Root Reciprocal
case STARS_NN_shufps: // Shuffle Single-FP
case STARS_NN_sqrtps: // Packed Single-FP Square Root
case STARS_NN_sqrtss: // Scalar Single-FP Square Root
case STARS_NN_stmxcsr: // Store Streaming SIMD Extensions Technology Control/Status Register
case STARS_NN_subps: // Packed Single-FP Subtract
case STARS_NN_subss: // Scalar Single-FP Subtract
case STARS_NN_ucomiss: // Scalar Unordered Single-FP Compare and Set EFLAGS
case STARS_NN_unpckhps: // Unpack High Packed Single-FP Data
case STARS_NN_unpcklps: // Unpack Low Packed Single-FP Data
case STARS_NN_xorps: // Bitwise Logical XOR for Single-FP Data
case STARS_NN_pavgb: // Packed Average (Byte)
case STARS_NN_pavgw: // Packed Average (Word)
case STARS_NN_pextrw: // Extract Word
case STARS_NN_pinsrw: // Insert Word
case STARS_NN_pmaxsw: // Packed Signed Integer Word Maximum
case STARS_NN_pmaxub: // Packed Unsigned Integer Byte Maximum
case STARS_NN_pminsw: // Packed Signed Integer Word Minimum
case STARS_NN_pminub: // Packed Unsigned Integer Byte Minimum
case STARS_NN_pmovmskb: // Move Byte Mask to Integer
case STARS_NN_pmulhuw: // Packed Multiply High Unsigned
case STARS_NN_psadbw: // Packed Sum of Absolute Differences
case STARS_NN_pshufw: // Packed Shuffle Word
case STARS_NN_maskmovq: // Byte Mask write
case STARS_NN_movntps: // Move Aligned Four Packed Single-FP Non Temporal
case STARS_NN_movntq: // Move 64 Bits Non Temporal
case STARS_NN_prefetcht0: // Prefetch to all cache levels
case STARS_NN_prefetcht1: // Prefetch to all cache levels
case STARS_NN_prefetcht2: // Prefetch to L2 cache
case STARS_NN_prefetchnta: // Prefetch to L1 cache
case STARS_NN_sfence: // Store Fence
SMP_fprintf(OutFile, "ERROR");
break;
// Pentium III Pseudo instructions
case STARS_NN_cmpeqps: // Packed Single-FP Compare EQ
case STARS_NN_cmpltps: // Packed Single-FP Compare LT
case STARS_NN_cmpleps: // Packed Single-FP Compare LE
case STARS_NN_cmpunordps: // Packed Single-FP Compare UNORD
case STARS_NN_cmpneqps: // Packed Single-FP Compare NOT EQ
case STARS_NN_cmpnltps: // Packed Single-FP Compare NOT LT
case STARS_NN_cmpnleps: // Packed Single-FP Compare NOT LE
case STARS_NN_cmpordps: // Packed Single-FP Compare ORDERED
case STARS_NN_cmpeqss: // Scalar Single-FP Compare EQ
case STARS_NN_cmpltss: // Scalar Single-FP Compare LT
case STARS_NN_cmpless: // Scalar Single-FP Compare LE
case STARS_NN_cmpunordss: // Scalar Single-FP Compare UNORD
case STARS_NN_cmpneqss: // Scalar Single-FP Compare NOT EQ
case STARS_NN_cmpnltss: // Scalar Single-FP Compare NOT LT
case STARS_NN_cmpnless: // Scalar Single-FP Compare NOT LE
case STARS_NN_cmpordss: // Scalar Single-FP Compare ORDERED
SMP_fprintf(OutFile, "ERROR");
break;
// AMD K7 instructions
case STARS_NN_pf2iw: // Packed Floating-Point to Integer with Sign Extend
case STARS_NN_pfnacc: // Packed Floating-Point Negative Accumulate
case STARS_NN_pfpnacc: // Packed Floating-Point Mixed Positive-Negative Accumulate
case STARS_NN_pi2fw: // Packed 16-bit Integer to Floating-Point
case STARS_NN_pswapd: // Packed Swap Double Word
SMP_fprintf(OutFile, "ERROR");
break;
// Undocumented FP instructions (thanks to norbert.juffa@adm.com)
case STARS_NN_fstp1: // Alias of Store Real and Pop
case STARS_NN_fcom2: // Alias of Compare Real
case STARS_NN_fcomp3: // Alias of Compare Real and Pop
case STARS_NN_fxch4: // Alias of Exchange Registers
case STARS_NN_fcomp5: // Alias of Compare Real and Pop
case STARS_NN_ffreep: // Free Register and Pop
case STARS_NN_fxch7: // Alias of Exchange Registers
case STARS_NN_fstp8: // Alias of Store Real and Pop
case STARS_NN_fstp9: // Alias of Store Real and Pop
SMP_fprintf(OutFile, "ERROR");
break;
// Pentium 4 instructions
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
case STARS_NN_addpd: // Add Packed Double-Precision Floating-Point Values
case STARS_NN_addsd: // Add Scalar Double-Precision Floating-Point Values
case STARS_NN_andnpd: // Bitwise Logical AND NOT of Packed Double-Precision Floating-Point Values
case STARS_NN_andpd: // Bitwise Logical AND of Packed Double-Precision Floating-Point Values
case STARS_NN_clflush: // Flush Cache Line
case STARS_NN_cmppd: // Compare Packed Double-Precision Floating-Point Values
case STARS_NN_cmpsd: // Compare Scalar Double-Precision Floating-Point Values
case STARS_NN_comisd: // Compare Scalar Ordered Double-Precision Floating-Point Values and Set EFLAGS
case STARS_NN_cvtdq2pd: // Convert Packed Doubleword Integers to Packed Single-Precision Floating-Point Values
case STARS_NN_cvtdq2ps: // Convert Packed Doubleword Integers to Packed Double-Precision Floating-Point Values
case STARS_NN_cvtpd2dq: // Convert Packed Double-Precision Floating-Point Values to Packed Doubleword Integers
case STARS_NN_cvtpd2pi: // Convert Packed Double-Precision Floating-Point Values to Packed Doubleword Integers
case STARS_NN_cvtpd2ps: // Convert Packed Double-Precision Floating-Point Values to Packed Single-Precision Floating-Point Values
case STARS_NN_cvtpi2pd: // Convert Packed Doubleword Integers to Packed Double-Precision Floating-Point Values
case STARS_NN_cvtps2dq: // Convert Packed Single-Precision Floating-Point Values to Packed Doubleword Integers
case STARS_NN_cvtps2pd: // Convert Packed Single-Precision Floating-Point Values to Packed Double-Precision Floating-Point Values
case STARS_NN_cvtsd2si: // Convert Scalar Double-Precision Floating-Point Value to Doubleword Integer
case STARS_NN_cvtsd2ss: // Convert Scalar Double-Precision Floating-Point Value to Scalar Single-Precision Floating-Point Value
case STARS_NN_cvtsi2sd: // Convert Doubleword Integer to Scalar Double-Precision Floating-Point Value
case STARS_NN_cvtss2sd: // Convert Scalar Single-Precision Floating-Point Value to Scalar Double-Precision Floating-Point Value
case STARS_NN_cvttpd2dq: // Convert With Truncation Packed Double-Precision Floating-Point Values to Packed Doubleword Integers
case STARS_NN_cvttpd2pi: // Convert with Truncation Packed Double-Precision Floating-Point Values to Packed Doubleword Integers
case STARS_NN_cvttps2dq: // Convert With Truncation Packed Single-Precision Floating-Point Values to Packed Doubleword Integers
case STARS_NN_cvttsd2si: // Convert with Truncation Scalar Double-Precision Floating-Point Value to Doubleword Integer
case STARS_NN_divpd: // Divide Packed Double-Precision Floating-Point Values
case STARS_NN_divsd: // Divide Scalar Double-Precision Floating-Point Values
case STARS_NN_lfence: // Load Fence
case STARS_NN_maskmovdqu: // Store Selected Bytes of Double Quadword
case STARS_NN_maxpd: // Return Maximum Packed Double-Precision Floating-Point Values
case STARS_NN_maxsd: // Return Maximum Scalar Double-Precision Floating-Point Value
case STARS_NN_mfence: // Memory Fence
case STARS_NN_minpd: // Return Minimum Packed Double-Precision Floating-Point Values
case STARS_NN_minsd: // Return Minimum Scalar Double-Precision Floating-Point Value
case STARS_NN_movapd: // Move Aligned Packed Double-Precision Floating-Point Values
case STARS_NN_movdq2q: // Move Quadword from XMM to MMX Register
case STARS_NN_movdqa: // Move Aligned Double Quadword
case STARS_NN_movdqu: // Move Unaligned Double Quadword
case STARS_NN_movhpd: // Move High Packed Double-Precision Floating-Point Values
case STARS_NN_movlpd: // Move Low Packed Double-Precision Floating-Point Values
case STARS_NN_movmskpd: // Extract Packed Double-Precision Floating-Point Sign Mask
case STARS_NN_movntdq: // Store Double Quadword Using Non-Temporal Hint
case STARS_NN_movnti: // Store Doubleword Using Non-Temporal Hint
case STARS_NN_movntpd: // Store Packed Double-Precision Floating-Point Values Using Non-Temporal Hint
case STARS_NN_movq2dq: // Move Quadword from MMX to XMM Register
case STARS_NN_movsd: // Move Scalar Double-Precision Floating-Point Values
case STARS_NN_movupd: // Move Unaligned Packed Double-Precision Floating-Point Values
case STARS_NN_mulpd: // Multiply Packed Double-Precision Floating-Point Values
case STARS_NN_mulsd: // Multiply Scalar Double-Precision Floating-Point Values
case STARS_NN_orpd: // Bitwise Logical OR of Double-Precision Floating-Point Values
case STARS_NN_paddq: // Add Packed Quadword Integers
case STARS_NN_pause: // Spin Loop Hint
case STARS_NN_pmuludq: // Multiply Packed Unsigned Doubleword Integers
case STARS_NN_pshufd: // Shuffle Packed Doublewords
case STARS_NN_pshufhw: // Shuffle Packed High Words
case STARS_NN_pshuflw: // Shuffle Packed Low Words
case STARS_NN_pslldq: // Shift Double Quadword Left Logical
case STARS_NN_psrldq: // Shift Double Quadword Right Logical
case STARS_NN_psubq: // Subtract Packed Quadword Integers
case STARS_NN_punpckhqdq: // Unpack High Data
case STARS_NN_punpcklqdq: // Unpack Low Data
case STARS_NN_shufpd: // Shuffle Packed Double-Precision Floating-Point Values
case STARS_NN_sqrtpd: // Compute Square Roots of Packed Double-Precision Floating-Point Values
case STARS_NN_sqrtsd: // Compute Square Rootof Scalar Double-Precision Floating-Point Value
case STARS_NN_subpd: // Subtract Packed Double-Precision Floating-Point Values
case STARS_NN_subsd: // Subtract Scalar Double-Precision Floating-Point Values
case STARS_NN_ucomisd: // Unordered Compare Scalar Ordered Double-Precision Floating-Point Values and Set EFLAGS
case STARS_NN_unpckhpd: // Unpack and Interleave High Packed Double-Precision Floating-Point Values
case STARS_NN_unpcklpd: // Unpack and Interleave Low Packed Double-Precision Floating-Point Values
case STARS_NN_xorpd: // Bitwise Logical OR of Double-Precision Floating-Point Values
SMP_fprintf(OutFile, "ERROR");
break;
// AMD syscall/sysret instructions
case STARS_NN_syscall: // Low latency system call
case STARS_NN_sysret: // Return from system call
SMP_fprintf(OutFile, "ERROR");
break;
// AMD64 instructions
case STARS_NN_swapgs: // Exchange GS base with KernelGSBase MSR
SMP_fprintf(OutFile, "ERROR");
break;
// New Pentium instructions (SSE3)
case STARS_NN_movddup: // Move One Double-FP and Duplicate
case STARS_NN_movshdup: // Move Packed Single-FP High and Duplicate
case STARS_NN_movsldup: // Move Packed Single-FP Low and Duplicate
SMP_fprintf(OutFile, "ERROR");
break;
// Missing AMD64 instructions
case STARS_NN_movsxd: // Move with Sign-Extend Doubleword
case STARS_NN_cmpxchg16b: // Compare and Exchange 16 Bytes
SMP_fprintf(OutFile, "ERROR");
break;
// SSE3 instructions
case STARS_NN_addsubpd: // Add /Sub packed DP FP numbers
case STARS_NN_addsubps: // Add /Sub packed SP FP numbers
case STARS_NN_haddpd: // Add horizontally packed DP FP numbers
case STARS_NN_haddps: // Add horizontally packed SP FP numbers
case STARS_NN_hsubpd: // Sub horizontally packed DP FP numbers
case STARS_NN_hsubps: // Sub horizontally packed SP FP numbers
case STARS_NN_monitor: // Set up a linear address range to be monitored by hardware
case STARS_NN_mwait: // Wait until write-back store performed within the range specified by the MONITOR instruction
case STARS_NN_fisttp: // Store ST in intXX (chop) and pop
case STARS_NN_lddqu: // Load unaligned integer 128-bit
SMP_fprintf(OutFile, "ERROR");
break;
// SSSE3 instructions
case STARS_NN_psignb: // Packed SIGN Byte
case STARS_NN_psignw: // Packed SIGN Word
case STARS_NN_psignd: // Packed SIGN Doubleword
case STARS_NN_pshufb: // Packed Shuffle Bytes
case STARS_NN_pmulhrsw: // Packed Multiply High with Round and Scale
case STARS_NN_pmaddubsw: // Multiply and Add Packed Signed and Unsigned Bytes
case STARS_NN_phsubsw: // Packed Horizontal Subtract and Saturate
case STARS_NN_phaddsw: // Packed Horizontal Add and Saturate
case STARS_NN_phaddw: // Packed Horizontal Add Word
case STARS_NN_phaddd: // Packed Horizontal Add Doubleword
case STARS_NN_phsubw: // Packed Horizontal Subtract Word
case STARS_NN_phsubd: // Packed Horizontal Subtract Doubleword
case STARS_NN_palignr: // Packed Align Right
case STARS_NN_pabsb: // Packed Absolute Value Byte
case STARS_NN_pabsw: // Packed Absolute Value Word
case STARS_NN_pabsd: // Packed Absolute Value Doubleword
SMP_fprintf(OutFile, "ERROR");
break;
// VMX instructions
case STARS_NN_vmcall: // Call to VM Monitor
case STARS_NN_vmclear: // Clear Virtual Machine Control Structure
case STARS_NN_vmlaunch: // Launch Virtual Machine
case STARS_NN_vmresume: // Resume Virtual Machine
case STARS_NN_vmptrld: // Load Pointer to Virtual Machine Control Structure
case STARS_NN_vmptrst: // Store Pointer to Virtual Machine Control Structure
case STARS_NN_vmread: // Read Field from Virtual Machine Control Structure
case STARS_NN_vmwrite: // Write Field from Virtual Machine Control Structure
case STARS_NN_vmxoff: // Leave VMX Operation
case STARS_NN_vmxon: // Enter VMX Operation
SMP_fprintf(OutFile, "ERROR");
break;
// Undefined Instruction
case STARS_NN_ud2: // Undefined Instruction
SMP_fprintf(OutFile, "ERROR");
break;
// Added with x86-64
case STARS_NN_rdtscp: // Read Time-Stamp Counter and Processor ID
SMP_fprintf(OutFile, "ERROR");
break;
// Geode LX 3DNow! extensions
case STARS_NN_pfrcpv: // Reciprocal Approximation for a Pair of 32-bit Floats
case STARS_NN_pfrsqrtv: // Reciprocal Square Root Approximation for a Pair of 32-bit Floats
SMP_fprintf(OutFile, "ERROR");
break;
// SSE2 pseudoinstructions
case STARS_NN_cmpeqpd: // Packed Double-FP Compare EQ
case STARS_NN_cmpltpd: // Packed Double-FP Compare LT
case STARS_NN_cmplepd: // Packed Double-FP Compare LE
case STARS_NN_cmpunordpd: // Packed Double-FP Compare UNORD
case STARS_NN_cmpneqpd: // Packed Double-FP Compare NOT EQ
case STARS_NN_cmpnltpd: // Packed Double-FP Compare NOT LT
case STARS_NN_cmpnlepd: // Packed Double-FP Compare NOT LE
case STARS_NN_cmpordpd: // Packed Double-FP Compare ORDERED
case STARS_NN_cmpeqsd: // Scalar Double-FP Compare EQ
case STARS_NN_cmpltsd: // Scalar Double-FP Compare LT
case STARS_NN_cmplesd: // Scalar Double-FP Compare LE
case STARS_NN_cmpunordsd: // Scalar Double-FP Compare UNORD
case STARS_NN_cmpneqsd: // Scalar Double-FP Compare NOT EQ
case STARS_NN_cmpnltsd: // Scalar Double-FP Compare NOT LT
case STARS_NN_cmpnlesd: // Scalar Double-FP Compare NOT LE
case STARS_NN_cmpordsd: // Scalar Double-FP Compare ORDERED
SMP_fprintf(OutFile, "ERROR");
break;
// SSSE4.1 instructions
1939
1940
1941
1942
1943
1944
1945
1946
1947
1948
1949
1950
1951
1952
1953
1954
1955
1956
1957
1958
1959
1960
1961
1962
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979
1980
1981
1982
1983
1984
1985
1986
case STARS_NN_blendpd: // Blend Packed Double Precision Floating-Point Values
case STARS_NN_blendps: // Blend Packed Single Precision Floating-Point Values
case STARS_NN_blendvpd: // Variable Blend Packed Double Precision Floating-Point Values
case STARS_NN_blendvps: // Variable Blend Packed Single Precision Floating-Point Values
case STARS_NN_dppd: // Dot Product of Packed Double Precision Floating-Point Values
case STARS_NN_dpps: // Dot Product of Packed Single Precision Floating-Point Values
case STARS_NN_extractps: // Extract Packed Single Precision Floating-Point Value
case STARS_NN_insertps: // Insert Packed Single Precision Floating-Point Value
case STARS_NN_movntdqa: // Load Double Quadword Non-Temporal Aligned Hint
case STARS_NN_mpsadbw: // Compute Multiple Packed Sums of Absolute Difference
case STARS_NN_packusdw: // Pack with Unsigned Saturation
case STARS_NN_pblendvb: // Variable Blend Packed Bytes
case STARS_NN_pblendw: // Blend Packed Words
case STARS_NN_pcmpeqq: // Compare Packed Qword Data for Equal
case STARS_NN_pextrb: // Extract Byte
case STARS_NN_pextrd: // Extract Dword
case STARS_NN_pextrq: // Extract Qword
case STARS_NN_phminposuw: // Packed Horizontal Word Minimum
case STARS_NN_pinsrb: // Insert Byte
case STARS_NN_pinsrd: // Insert Dword
case STARS_NN_pinsrq: // Insert Qword
case STARS_NN_pmaxsb: // Maximum of Packed Signed Byte Integers
case STARS_NN_pmaxsd: // Maximum of Packed Signed Dword Integers
case STARS_NN_pmaxud: // Maximum of Packed Unsigned Dword Integers
case STARS_NN_pmaxuw: // Maximum of Packed Word Integers
case STARS_NN_pminsb: // Minimum of Packed Signed Byte Integers
case STARS_NN_pminsd: // Minimum of Packed Signed Dword Integers
case STARS_NN_pminud: // Minimum of Packed Unsigned Dword Integers
case STARS_NN_pminuw: // Minimum of Packed Word Integers
case STARS_NN_pmovsxbw: // Packed Move with Sign Extend
case STARS_NN_pmovsxbd: // Packed Move with Sign Extend
case STARS_NN_pmovsxbq: // Packed Move with Sign Extend
case STARS_NN_pmovsxwd: // Packed Move with Sign Extend
case STARS_NN_pmovsxwq: // Packed Move with Sign Extend
case STARS_NN_pmovsxdq: // Packed Move with Sign Extend
case STARS_NN_pmovzxbw: // Packed Move with Zero Extend
case STARS_NN_pmovzxbd: // Packed Move with Zero Extend
case STARS_NN_pmovzxbq: // Packed Move with Zero Extend
case STARS_NN_pmovzxwd: // Packed Move with Zero Extend
case STARS_NN_pmovzxwq: // Packed Move with Zero Extend
case STARS_NN_pmovzxdq: // Packed Move with Zero Extend
case STARS_NN_pmuldq: // Multiply Packed Signed Dword Integers
case STARS_NN_pmulld: // Multiply Packed Signed Dword Integers and Store Low Result
case STARS_NN_ptest: // Logical Compare
case STARS_NN_roundpd: // Round Packed Double Precision Floating-Point Values
case STARS_NN_roundps: // Round Packed Single Precision Floating-Point Values
case STARS_NN_roundsd: // Round Scalar Double Precision Floating-Point Values
case STARS_NN_roundss: // Round Scalar Single Precision Floating-Point Values
SMP_fprintf(OutFile, "ERROR");
break;
// SSSE4.2 instructions
case STARS_NN_crc32: // Accumulate CRC32 Value
case STARS_NN_pcmpestri: // Packed Compare Explicit Length Strings: Return Index
case STARS_NN_pcmpestrm: // Packed Compare Explicit Length Strings: Return Mask
case STARS_NN_pcmpistri: // Packed Compare Implicit Length Strings: Return Index
case STARS_NN_pcmpistrm: // Packed Compare Implicit Length Strings: Return Mask
case STARS_NN_pcmpgtq: // Compare Packed Data for Greater Than
case STARS_NN_popcnt: // Return the Count of Number of Bits Set to 1
SMP_fprintf(OutFile, "ERROR");
break;