Class: Rucc::Gen

Inherits:
Object
  • Object
show all
Defined in:
lib/rucc/gen.rb

Constant Summary collapse

REGS =
["rdi", "rsi", "rdx", "rcx", "r8", "r9"].freeze
SREGS =
["dil", "sil", "dl", "cl", "r8b", "r9b"].freeze
MREGS =
["edi", "esi", "edx", "ecx", "r8d", "r9d"].freeze

Instance Method Summary collapse

Constructor Details

#initialize(output, label_gen) ⇒ Gen

Returns a new instance of Gen.

Parameters:



11
12
13
14
15
16
17
18
19
20
# File 'lib/rucc/gen.rb', line 11

def initialize(output, label_gen)
  @output    = output
  @label_gen = label_gen

  @stackpos = nil

  # number of float and int
  @numgp = nil
  @numfp = nil
end

Instance Method Details

#emit_toplevel(v) ⇒ Object

Parameters:



23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/rucc/gen.rb', line 23

def emit_toplevel(v)
  @stackpos = 8
  if v.kind == AST::FUNC
    emit_func_prologue(v)
    emit_expr(v.body)
    emit_ret
  elsif v.kind == AST::DECL
    emit_global_var(v)
  else
    raise "internal error"
  end
end