2015-05-08 21:21:24 -04:00
USING: cpu.x86.assembler cpu.x86.assembler.operands.private help.markup
help.syntax layouts math ;
2014-05-04 19:38:43 -04:00
IN: cpu.x86
2015-05-08 21:21:24 -04:00
HELP: %boolean
{ $values
{ "dst" "register" }
{ "cc" "comparision symbol" }
{ "temp" "temporary register" }
}
{ $description "Helper word for emitting conditional move instructions." }
{ $see-also CMOVL CMOVLE CMOVG CMOVGE CMOVE CMOVNE } ;
HELP: JLE
{ $values "dst" "destination offset (relative to the instruction pointer register)" }
{ $description "Emits a 'jle' instruction." } ;
HELP: reserved-stack-space
{ $values { "n" integer } }
{ $description "Size in bytes of the register parameter area. It only exists on the windows x86.64 architecture, where it is 32 bytes and allocated by the caller. On all other platforms it is 0." } ;
2014-05-04 19:38:43 -04:00
HELP: stack-reg
2014-05-10 19:45:07 -04:00
{ $values { "reg" "a register symbol" } }
2014-05-04 19:38:43 -04:00
{ $description
"Symbol of the machine register that holds the (cpu) stack address."
} ;
HELP: ds-reg
2014-05-10 19:45:07 -04:00
{ $values { "reg" "a register symbol" } }
2014-05-04 19:38:43 -04:00
{ $description
"Symbol of the machine register that holds the address to the data stack's location."
} ;
HELP: (%inc)
2014-05-10 19:45:07 -04:00
{ $values { "n" number } { "reg" "a register symbol" } }
2014-05-04 19:38:43 -04:00
{ $description
2014-05-06 12:10:24 -04:00
"Emits machine code for increasing or decreasing the given register a number of cell sizes bytes."
2014-05-04 19:38:43 -04:00
}
{ $examples
{ $unchecked-example
"USING: cpu.x86 make prettyprint ;"
"[ 8 ECX (%inc) ] B{ } make disassemble"
"00000000615e5140: 83c140 add ecx, 0x40"
}
} ;
2015-03-16 05:06:00 -04:00
HELP: (%slot)
{ $values
{ "obj" "a register symbol" }
{ "slot" "a register symbol" }
{ "scale" "number of bits required to address all bytes in a " { $link cell } "." }
{ "tag" integer }
{ "op" indirect }
}
{ $description "Creates an indirect operand for addressing a slot in a container." }
{ $examples
{ $unchecked-example
"USING: cpu.x86 ;"
"[ RAX RBX 3 -14 (%slot) EDI MOV ] B{ } make disassemble"
"0000000001dd0990: 897cd80e mov [rax+rbx*8+0xe], edi"
}
} ;
2014-07-07 17:34:10 -04:00
HELP: decr-stack-reg
{ $values { "n" number } }
{ $description "Emits an instruction for decrementing the stack register the given number of bytes." } ;
2014-05-04 19:38:43 -04:00
HELP: load-zone-offset
{ $values { "nursery-ptr" "a register symbol" } }
{ $description
2014-05-06 12:10:24 -04:00
"Emits machine code for loading the address to the nursery into the machine register."
2014-05-04 19:38:43 -04:00
}
{ $examples
{ $unchecked-example
2014-05-06 12:10:24 -04:00
"USING: cpu.x86 make ;"
2014-05-04 19:38:43 -04:00
"[ RCX load-zone-offset ] B{ } make disassemble"
"0000000001b48f80: 498d4d10 lea rcx, [r13+0x10]"
}
} ;
2014-05-06 12:10:24 -04:00
2014-05-11 07:12:56 -04:00
HELP: store-tagged
{ $values { "dst" "a register symbol" } { "tag" "a builtin class" } }
{ $description "Tags the register with the tag number for the given class." }
{ $examples
{ $unchecked-example
"USING: cpu.x86 make ;"
"[ RAX alien store-tagged ] B{ } make disassemble"
"0000000002275f10: 4883c806 or rax, 0x6"
}
} ;
2014-05-06 12:10:24 -04:00
HELP: copy-register*
{ $values
{ "dst" "a register symbol" }
{ "src" "a register symbol" }
{ "rep" "a value representation singleton" }
}
{ $description
"Emits machine code for copying from a register to another."
}
{ $examples
{ $unchecked-example
"USING: cpu.x86 make ;"
"[ XMM1 XMM2 double-rep copy-register* ] B{ } make disassemble"
"0000000533c61fe0: 0f28ca movaps xmm1, xmm2"
}
} ;
2014-05-11 07:12:56 -04:00
HELP: %mov-vm-ptr
{ $values { "reg" "a register symbol" } }
{ $description
"Emits machine code for moving the vm pointer to a register." }
{ $examples
{ $unchecked-example
"USING: cpu.x86.64 make ;"
"[ RAX %mov-vm-ptr ] B{ } make disassemble"
"0000000002290b30: 4c89e8 mov rax, r13"
}
} ;