Method: Voodoo::ARMGasGenerator#end_block

Defined in:
lib/voodoo/generators/arm_gas_generator.rb

#end_blockObject

Ends the current block.



439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
# File 'lib/voodoo/generators/arm_gas_generator.rb', line 439

def end_block
  # If we are returning to top level, restore stack pointer
  # and saved registers.
  if @environment.parent == @top_level
    offset = @frame_size - @saved_size
    if offset > 0
      emit "add sp, sp, \##{offset}\n"
    end
    emit "ldmfd sp!, {#{@saved_registers.join ', '}}\n"
    @frame_size = 0
    @frame_offset = 0
    @saved_registers = []
    @saved_size = 0

    # If we need to emit constants, do so now
    unless @constants.empty?
      emit_constants_with_goto
    end
  end

  # Restore old value of @environment
  @environment = @environment.parent
end