-
Notifications
You must be signed in to change notification settings - Fork 140
CPU and VM Instruction Set Comparison
zeitue edited this page Jul 13, 2015
·
16 revisions
types explanation:
- c/uc - signed/unsigned 8-bit character
- s/us - signed/unsigned 16-bit short int
- i/ui - signed/unsigned 32-bit int
- l/ul - signed/unsigned 64-bit long int
- q/uq - signed/unsigned 128-bit quad int
- f - 32-bit single-precision floating point number
- d - 64-bit double-precision floating point number
- v* - pointer type
values explanation:
- exists - the architecture has some concept of this type
- ld/sto - the architecture can load and store these types to/from memory
- convert - the architecture can convert to/from this type
- bitwise - the architecture can perform bitwise ops on this type
- math - the architecture can perform simple math on this type
- cmp - the architecture can perform comparisons between this type
- ret - the architecture can use this type as a return value from a function call
- call - the architecture can use this type as an argument to a function call
- imm - this type can be used as an immediate value
- ovfl - this type can be used in overflow-detecting math ops
(unfinished) x86 - https://en.wikipedia.org/wiki/X86_instruction_listings
type | exists | ld/sto | convert | bitwise | math | cmp | ret | call | imm | ovfl |
---|---|---|---|---|---|---|---|---|---|---|
c | x | x | x | x | x | x | ||||
uc | x | |||||||||
s | x | x | x | x | x | x | ||||
us | x | |||||||||
i | x | x | x | x | x | x | ||||
ui | x | |||||||||
l | ||||||||||
ul | ||||||||||
q | ||||||||||
uq | ||||||||||
f | x | x | x | x | ||||||
d | x | x | x | x | ||||||
void* |
(unfinished) x86_64
type | exists | ld/sto | convert | bitwise | math | cmp | ret | call | imm | ovfl |
---|---|---|---|---|---|---|---|---|---|---|
c | ||||||||||
uc | ||||||||||
s | ||||||||||
us | ||||||||||
i | ||||||||||
ui | ||||||||||
l | ||||||||||
ul | ||||||||||
q | ||||||||||
uq | ||||||||||
f | ||||||||||
d | ||||||||||
void* |
(unfinished) ARM
type | exists | ld/sto | convert | bitwise | math | cmp | ret | call | imm | ovfl |
---|---|---|---|---|---|---|---|---|---|---|
c | ||||||||||
uc | ||||||||||
s | ||||||||||
us | ||||||||||
i | ||||||||||
ui | ||||||||||
l | ||||||||||
ul | ||||||||||
q | ||||||||||
uq | ||||||||||
f | ||||||||||
d | ||||||||||
void* |
(unfinished) MIPS - https://en.wikipedia.org/wiki/MIPS_architecture
type | exists | ld/sto | convert | bitwise | math | cmp | ret | call | imm | ovfl |
---|---|---|---|---|---|---|---|---|---|---|
c | ||||||||||
uc | ||||||||||
s | x | x | ||||||||
us | ||||||||||
i | x | x | x | x | x | x | ||||
ui | x | x | x | x | x | x | ||||
l | x | x | x | x | x | x | ||||
ul | x | x | x | x | x | x | ||||
q | ||||||||||
uq | ||||||||||
f | x | x | x | x | x | |||||
d | x | x | x | x | x | |||||
void* |
(finished) JVM - http://en.wikipedia.org/wiki/Java_bytecode_instruction_listings
type | exists | ld/sto | convert | bitwise | math | cmp | ret | call | imm | ovfl |
---|---|---|---|---|---|---|---|---|---|---|
c | x | |||||||||
uc | ||||||||||
s | x | |||||||||
us | ||||||||||
i | x | x | x | x | x | |||||
ui | ||||||||||
l | x | x | x | x | x | x | x | |||
ul | ||||||||||
q | ||||||||||
uq | ||||||||||
f | x | x | x | x | x | x | ||||
d | x | x | x | x | x | x | ||||
void* | x | x | x |
(finished) NanoJit - https://developer.mozilla.org/En/Nanojit/LIR
type | exists | ld/sto | convert | bitwise | math | cmp | ret | call | imm | ovfl |
---|---|---|---|---|---|---|---|---|---|---|
c | x | x | ||||||||
uc | x | x | ||||||||
s | x | x | ||||||||
us | x | x | ||||||||
i | x | x | x | x | x | x | x | x | x | x |
ui | x | x | x | x | ||||||
q | x | x | x | x | x | x | x | x | x | x |
uq | x | x | x | |||||||
f | x | x | x | |||||||
d | x | x | x | x | x | x | x | x | ||
void* |
(finished) GNU Lightning - http://www.gnu.org/software/lightning/manual/lightning.html#The-instruction-set
type | exists | ld/sto | convert | bitwise | math | cmp | ret | call | imm | ovfl |
---|---|---|---|---|---|---|---|---|---|---|
c | x | x | x | x | x | |||||
uc | x | x | x | x | x | |||||
s | x | x | x | x | x | |||||
us | x | x | x | x | x | |||||
i | x | x | x | x | x | x | x | x | ||
ui | x | x | x | x | x | x | x | x | ||
l | x | x | x | x | x | x | x | x | ||
ul | x | x | x | x | x | x | x | x | ||
f | x | x | x | x | x | x | x | |||
d | x | x | x | x | x | x | x | |||
void* | x | x | x | x | x | x | x |
blank table
type | exists | ld/sto | convert | bitwise | math | cmp | ret | call | imm | ovfl |
---|---|---|---|---|---|---|---|---|---|---|
c | ||||||||||
uc | ||||||||||
s | ||||||||||
us | ||||||||||
i | ||||||||||
ui | ||||||||||
l | ||||||||||
ul | ||||||||||
q | ||||||||||
uq | ||||||||||
f | ||||||||||
d | ||||||||||
void* |
todo:
- hardware CPUs: x86 (done), x86_64, ARM, MIPS
- VMs: CIL(?), JVM, NanoJit, GNU Lightning (these are done, just need to copy/paste from paper to wiki)