factor/basis/cpu/x86/x86-docs.factor

129 lines
4.3 KiB
Factor

USING: compiler.cfg.registers cpu.x86.assembler
cpu.x86.assembler.operands cpu.x86.assembler.operands.private
help.markup help.syntax layouts math sequences system ;
IN: cpu.x86
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: %prepare-var-args
{ $values { "reg-inputs" sequence } }
{ $description "Emits code needed for calling variadic functions. On " { $link unix } " " { $link x86.64 } ", the " { $link AL } " register must contain the number of float registers used. " } ;
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 " { $link x86.64 } " architecture, where it is 32 bytes and allocated by the caller. On all other platforms it is 0." } ;
HELP: stack-reg
{ $values { "reg" "a register symbol" } }
{ $description
"Symbol of the machine register that holds the (cpu) stack address."
} ;
HELP: ds-reg
{ $values { "reg" "a register symbol" } }
{ $description
"Symbol of the machine register that holds the address to the data stack's location."
} ;
HELP: (%inc)
{ $values { "n" number } { "reg" "a register symbol" } }
{ $description
"Emits machine code for increasing or decreasing the given register a number of cell sizes bytes."
}
{ $examples
{ $unchecked-example
"USING: cpu.x86 make prettyprint ;"
"[ 8 ECX (%inc) ] B{ } make disassemble"
"00000000615e5140: 83c140 add ecx, 0x40"
}
} ;
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"
}
} ;
HELP: decr-stack-reg
{ $values { "n" number } }
{ $description "Emits an instruction for decrementing the stack register the given number of bytes. If n is equal to the " { $link cell } " size, then a " { $link PUSH } " instruction is emitted instead because it has a shorter encoding." } ;
HELP: incr-stack-reg
{ $values { "n" number } }
{ $description "Emits an instruction for incrementing the stack register the given number of bytes. If n is equal to the " { $link cell } " size, then a " { $link POP } " instruction is emitted instead because it has a shorter encoding." } ;
HELP: load-zone-offset
{ $values { "nursery-ptr" "a register symbol" } }
{ $description
"Emits machine code for loading the address to the nursery into the machine register."
}
{ $examples
{ $unchecked-example
"USING: cpu.x86 make ;"
"[ RCX load-zone-offset ] B{ } make disassemble"
"0000000001b48f80: 498d4d10 lea rcx, [r13+0x10]"
}
} ;
HELP: loc>operand
{ $values { "loc" loc } { "operand" indirect } }
{ $description "Converts a stack location to an operand passable to the " { $link MOV } " instruction." } ;
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"
}
} ;
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"
}
} ;
ARTICLE: "cpu.x86" "CPU x86 compiler backend"
"Implementation of " { $vocab-link "cpu.architecture" } " for x86 machines."
$nl
{ $link ADD } " and " { $link SUB } " variants:"
{ $subsections (%inc) decr-stack-reg incr-stack-reg } ;
ABOUT: "cpu.x86"