Class: Rubycc::IR::AggregatePlan
- Inherits:
-
Data
- Object
- Data
- Rubycc::IR::AggregatePlan
- 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
-
#align16 ⇒ Object
readonly
Returns the value of attribute align16.
-
#mode ⇒ Object
readonly
Returns the value of attribute mode.
-
#pieces ⇒ Object
readonly
Returns the value of attribute pieces.
Instance Attribute Details
#align16 ⇒ Object (readonly)
Returns the value of attribute align16
41 42 43 |
# File 'lib/rubycc/ir/call_convention.rb', line 41 def align16 @align16 end |
#mode ⇒ Object (readonly)
Returns the value of attribute mode
41 42 43 |
# File 'lib/rubycc/ir/call_convention.rb', line 41 def mode @mode end |
#pieces ⇒ Object (readonly)
Returns the value of attribute pieces
41 42 43 |
# File 'lib/rubycc/ir/call_convention.rb', line 41 def pieces @pieces end |