package x86 import ( "git.akyoto.dev/cli/q/src/cpu" "git.akyoto.dev/cli/q/src/sizeof" ) // PushNumber pushes a number onto the stack. func PushNumber(code []byte, number int) []byte { length := sizeof.Signed(number) if length >= 8 { panic("x86 does not support pushing 64-bit numbers") } if length >= 2 { return append( code, 0x68, byte(number), byte(number>>8), byte(number>>16), byte(number>>24), ) } return append(code, 0x6A, byte(number)) } // PushRegister pushes the value inside the register onto the stack. func PushRegister(code []byte, register cpu.Register) []byte { if register > 0b111 { code = append(code, REX(0, 0, 0, 1)) register &= 0b111 } return append( code, 0x50+byte(register), ) }