Class: Rubycc::IR::AggregatePlan

Inherits:
Data
  • Object
show all
Defined in:
lib/rubycc/ir/call_convention.rb

Overview

How a convention passes one aggregate by value:

:registers    — `pieces` names each register-borne piece;
:memory       — the value is laid into the caller's stack argument area
              whole, and a result of this shape is written through a
              hidden pointer the caller passes as an ordinary leading
              argument (System V AMD64's MEMORY class);
:by_reference — the caller copies the value somewhere of its own and
              passes the copy's *address* instead, and a result of
              this shape is written through the convention's dedicated
              indirect result register (AAPCS64's x8).

align16 marks an aggregate of 16-byte alignment (one built around an __int128, or declared _Alignas(16)). Both conventions round its stack offset up to a 16-byte boundary when it spills; AAPCS64 additionally rounds NGRN up so its first integer register is even-numbered, landing it in an aligned x-register pair (System V has no such register rule — a 16-byte argument takes two consecutive registers of either parity).

Instance Attribute Summary collapse

Instance Attribute Details

#align16Object (readonly)

Returns the value of attribute align16

Returns:

  • (Object)

    the current value of align16



41
42
43
# File 'lib/rubycc/ir/call_convention.rb', line 41

def align16
  @align16
end

#modeObject (readonly)

Returns the value of attribute mode

Returns:

  • (Object)

    the current value of mode



41
42
43
# File 'lib/rubycc/ir/call_convention.rb', line 41

def mode
  @mode
end

#piecesObject (readonly)

Returns the value of attribute pieces

Returns:

  • (Object)

    the current value of pieces



41
42
43
# File 'lib/rubycc/ir/call_convention.rb', line 41

def pieces
  @pieces
end