Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

ITT: Make your own instruction set.

Name: Anonymous 2008-11-29 17:22

Make your own instruction set for your own made up processor.  How many bits can it access?  What kind of tasks will it be used for?  Bonus points for making an implementation in sepples, FIOC, lisp, or other GENERAL PURPOSE SCALABLE COST-EFFECTIVE ENTERPRISE QUALITY PROGRAMMING LANGUAGES(such as java)

Name: Anonymous 2008-12-01 2:41

a set of 256 stacks, shared between 16 cores.
each stack element is 128 bits, and can be used as the real and imaginary parts of a complex number (64-bits each), a single 128-bit signed integer or floating point value, or a machine instruction. each core pops and executes the instruction on top of it's instruction stack, which is stack 0 for core 0, stack 1 for core 1, etc. the instruction set is as follows:
0x00000000 000000xx 00000000 00000000
 clear x
removes all elements from x (stack).
0x00000001 000000xx yyyyyyyy yyyyyyyy
 drop x y
removes the top y (64-bit unsigned integer) elements from x (stack).
0x00000002 00xx00yy zzzzzzzz zzzzzzzz
 cdrop x y
drops the top z (64-bit unsigned integer) values from x (stack) if the top two values on y (stack) are equal, otherwise does nothing. the top two values on y are popped and discarded.
0x00000003 00xx00yy zzzzzzzz zzzzzzzz
 move x y z
copies z (64-bit unsigned integer) elements from x (stack) to y (stack).
0x00000004 00xx00yy zzzzzzzz zzzzzzzz
 copy x y z
copies z (64-bit unsigned integer) elements from x (stack) to y (stack).
0x00000005 00xx00yy 00000000 00000000
 swap x y
swap x (stack) and y (stack).
0x00000006 000000xx yyyyyyyy yyyyyyyy
 dup x y
duplicates the top y (64-bit unsigned integer) elements on x (stack).
0x00000007 000000xx yyyyyyyy yyyyyyyy
 rot x y
rotates the top y (64-bit unsigned integer) elements on x (stack).
0x00000008 00xx00yy zzzzzzzz zzzzzzzz
 uadd x y z
pops and sums (as unsigned integers) the top z (number) elements from x (stack) and pushes the result onto x. if an overflow occurs, pushes the value 1 onto y (stack), otherwise pushes the value 0 onto y.
0x00000009 00xx00yy zzzzzzzz zzzzzzzz
 usub x y z
like uadd, but with subtraction instead of addition, and underflow instead of overflow.
0x0000000A 00xx00yy zzzzzzzz zzzzzzzz
 umul x y z
like uadd, but with multiplication.
0x0000000B 000000xx yyyyyyyy yyyyyyyy
 udiv x y
like uadd, but with division, and no possibility of underflow or overflow.
0x0000000C 00xx00yy zzzzzzzz zzzzzzzz
 sadd x y z
like uadd, but with signed integers instead of unsigned. if an underflow occurs, -1 is pushed onto y.
0x0000000D 00xx00yy zzzzzzzz zzzzzzzz
 ssub x y z
like usub, but with signed integers. if an overflow occurs, -1 is pushed onto y
0x0000000E 00xx00yy zzzzzzzz zzzzzzzz
 smul x y z
like sadd, but with multiplication.
0x0000000F 000000xx yyyyyyyy yyyyyyyy
 sdiv x y
like udiv, but with signed integers.
0x00000010 000000xx yyyyyyyy yyyyyyyy
 fadd x y
like sadd, but with floating point numbers instead of signed integers and no possibility of overflow.
0x00000011 000000xx yyyyyyyy yyyyyyyy
 fsub x y
like ssub, but with floating point numbers and no possibility of overflow.
0x00000012 000000xx yyyyyyyy yyyyyyyy
 fmul x y
like smul, but with floating point numbers and no possibility of overflow.
0x00000013 000000xx yyyyyyyy yyyyyyyy
 fdiv x y
like sdiv, but with floating point numbers.
0x00000014 000000xx yyyyyyyy yyyyyyyy
 cadd x y
like fadd, but with complex numbers instead of floating point numbers.
0x00000015 000000xx yyyyyyyy yyyyyyyy
 csub x y
like fsub, but with complex numbers.
0x00000016 000000xx yyyyyyyy yyyyyyyy
 cmul x y
like fmul, but with complex numbers.
0x00000017 000000xx yyyyyyyy yyyyyyyy
 cdiv x y
like sdiv, but with floating point numbers.
0x00000018 000000xx yyyyyyyy yyyyyyyy
 and x y
pops the top y (64-bit unsigned integer) values from x (stack), performs a bitwise AND on them, and pushes the result onto x.
0x00000019 000000xx yyyyyyyy yyyyyyyy
 or x y
like and, but with OR instead of AND.
0x0000001A 000000xx yyyyyyyy yyyyyyyy
 xor x y
like and, but with XOR.
0x0000001B 00xx00yy zzzzzzzz zzzzzzzz
 pushm x y z
pops a memory location from x (stack), and pushes z (64-bit unsigned integer) values at that location onto y (stack).
0x0000001C 00xx00yy zzzzzzzz zzzzzzzz
 popm x y z
pops a memory location from x (stack), then pops z (64-bit unsigned integer) values from y (stack) and stores them at that memory location.

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List