document CPUID, with one puzzling exception
This commit is contained in:
parent
b52e4ead18
commit
7df7cedbf1
16
cpux86-ta.js
16
cpux86-ta.js
@ -4862,21 +4862,21 @@ CPU_X86.prototype.exec_internal = function(N_cycles, interrupt) {
|
||||
_op = 24;
|
||||
}
|
||||
function op_CPUID() {
|
||||
var Rb;
|
||||
Rb = regs[0];
|
||||
switch (Rb) {
|
||||
case 0:
|
||||
var eax;
|
||||
eax = regs[0];
|
||||
switch (eax) {
|
||||
case 0: // eax == 0: vendor ID
|
||||
regs[0] = 1;
|
||||
regs[3] = 0x756e6547 & -1;
|
||||
regs[2] = 0x49656e69 & -1;
|
||||
regs[1] = 0x6c65746e & -1;
|
||||
break;
|
||||
case 1:
|
||||
case 1: // eax == 1: processor info and feature flags
|
||||
default:
|
||||
regs[0] = (5 << 8) | (4 << 4) | 3;
|
||||
regs[3] = 8 << 8;
|
||||
regs[0] = (5 << 8) | (4 << 4) | 3; // family | model | stepping
|
||||
regs[3] = 8 << 8; // danluu: This is a mystery to me. This bit now indicates clflush line size, but must have meant something else in the past.
|
||||
regs[1] = 0;
|
||||
regs[2] = (1 << 4);
|
||||
regs[2] = (1 << 4); // rdtsc support
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -25,6 +25,8 @@ have been added.
|
||||
The core opcode execution loop has been autocommented to indicate what
|
||||
instruction operation the opcode refers to.
|
||||
|
||||
One mystery is, why does CPUID(1) return 8 << 8 in EBX? EBX[15:8] is now used to indicate CLFLUSH line size, but that field must have been used for something else in the past.
|
||||
|
||||
### ETC
|
||||
|
||||
I highly recommend, by the way, the excellent [JSShaper][2] library for transforming large javascript code bases. The hacks I made from it are in this repo: a little symbol-name-transformer node.js script and an emacs function for doing this in live buffers.
|
||||
|
Loading…
Reference in New Issue
Block a user