Method: Voodoo::AMD64NasmGenerator#initialize
- Defined in:
- lib/voodoo/generators/amd64_nasm_generator.rb
#initialize(params = {}) ⇒ AMD64NasmGenerator
Returns a new instance of AMD64NasmGenerator.
64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/voodoo/generators/amd64_nasm_generator.rb', line 64 def initialize params = {} # Number of bytes in a word @WORDSIZE_BITS = 3 @WORDSIZE = 1 << @WORDSIZE_BITS # Word name in NASM lingo @WORD_NAME = 'qword' # Default alignment for code @CODE_ALIGNMENT = 0 # Default alignment for data @DATA_ALIGNMENT = @WORDSIZE # Default alignment for functions @FUNCTION_ALIGNMENT = 16 # Register used for return values @RETURN_REG = :rax # Stack alignment restrictions @STACK_ALIGNMENT_BITS = @WORDSIZE_BITS @STACK_ALIGNMENT = 1 << @STACK_ALIGNMENT_BITS @TEMPORARIES = [:r11] # Registers used for argument passing @ARG_REGS = [:rdi, :rsi, :rdx, :rcx, :r8, :r9] @NREG_ARGS = @ARG_REGS.length # Registers used to store locals @LOCAL_REGISTERS = [:r12, :r13, :r14, :r15] @NLOCAL_REGISTERS = @LOCAL_REGISTERS.length @LOCAL_REGISTERS_SET = Set.new @LOCAL_REGISTERS # Accumulator index @AX = :rax # Base index @BX = :rbx # Count index @CX = :rcx # Data index @DX = :rdx # Base pointer @BP = :rbp # Stack pointer @SP = :rsp @SAVE_FRAME_REGISTERS = [:rbx, :r12, :r13, :r14, :r15, :rsp, :rbp] @SAVED_FRAME_LAYOUT = {} @SAVE_FRAME_REGISTERS.each_with_index { |r,i| @SAVED_FRAME_LAYOUT[r] = i } super params @features.merge! \ :'bits-per-word' => '64', :'byte-order' => 'little-endian', :'bytes-per-word' => '8' @saved_registers = [] @function_end_label = nil end |