x86 asm: make add awesome

This commit is contained in:
Ciro Santilli 六四事件 法轮功
2019-06-10 00:00:00 +00:00
parent 038c23729b
commit 90925e7e06

View File

@@ -3,7 +3,43 @@
#include <lkmc.h> #include <lkmc.h>
LKMC_PROLOGUE LKMC_PROLOGUE
/* Register immediate. */
mov $1, %rax mov $1, %rax
add $2, %rax add $2, %rax
LKMC_ASSERT_EQ(%rax, $3) LKMC_ASSERT_EQ(%rax, $3)
/* Register register. */
mov $1, %rax
mov $2, %rbx
add %rbx, %rax
LKMC_ASSERT_EQ(%rax, $3)
/* Memory and immediate. */
.data
memory_immediate: .quad 0x123456789ABCDEF0
.text
addq $1, memory_immediate
LKMC_ASSERT_EQ(memory_immediate, $0x123456789ABCDEF1)
/* Memory and register. */
.data
memory_register: .quad 0x123456789ABCDEF0
.text
mov $1, %rax
add %rax, memory_register
LKMC_ASSERT_EQ(memory_register, $0x123456789ABCDEF1)
#if 0
/* Cannot do different register sizes:
* Error: operand type mismatch for for `add'
*/
add %rax, %eax
#endif
#if 0
/* Cannot do memory memory.
* Error: too many memory references for `add'
*/
addq memory_immediate, memory_register
#endif
LKMC_EPILOGUE LKMC_EPILOGUE