INLINE(1) General Commands Manual INLINE(1)
inline - in-line procedure call expander
/usr/lib/inline [ -w ] [ -v ] [ -o outputfile ] [ -i inlinefile ] ...
[ cpu-option ] [ fpu-option ] filename...
inline expands assembly language calls in the indicated source files
into copies of the corresponding procedure bodies obtained from an
inlinefile specified with the -i option. If no inlinefile is speci-
fied, the source files are simply concatenated and written to the stan-
dard output. If no source files are specified, the input is read from
the standard input.
Inline itself is little more than a sed script. Almost all of the ben-
efit produced is derived from subsequent peephole optimization.
-w Display warnings for duplicate definitions on the standard
-v Verbose. Display the names of routines that were actually in-
line expanded in the sourcefile on the standard error.
write output to the indicated file; standard output by default.
Read in-line code templates from inlinefile.
Specify templates for the machine architecture of a Sun-2 or
Sun-3 system. If this option is omitted, the proper template
for the host architecture is used. Can be one of:
-mc68010 expand .mc68010 code templates
-mc68020 expand .mc68020 code templates
Specify a floating-point processor option for a Sun-2 or Sun-3
system. Can be one of:
-fsoft expand .fsoft code templates (the default)
-fswitch expand .fswitch code templates
-fsky expand .fsky code templates (-mc68010 only)
-f68881 expand .f68881 code templates (-mc68020 only)
-ffpa expand .ffpa code templates (-mc68020 only)
Each inlinefile contains one or more labeled assembly language tem-
plates of the form:
where the instructions constitute an in-line expansion of the named
routine. An inline-directive is a command of the form:
.inline identifier, argsize
This declares a block of code for the routine named by identifier, with
argsize bytes of arguments. (argsize is optional on Sun-4 systems).
Calls to the named routine are replaced by the code in the in-line tem-
For Sun-2 and Sun-3 systems, the following additional forms are recog-
.mc68010 identifier, argsize
.mc68020 identifier, argsize
.fsoft identifier, argsize
.fswitch identifier, argsize
.fsky identifier, argsize
.f68881 identifier, argsize
.ffpa identifier, argsize
These forms are similar to .inline, with the addition of a CPU or FPU
specification. The template is only expanded if the specified target
system matches the value of the target CPU or FPU type, as determined
by the command-line options, or if none were given, by the type of the
Multiple templates are permitted; matching templates after the first
are ignored. Duplicate templates may be placed in order of decreasing
performance of the corresponding hardware; thus the most efficient
usable version will be selected.
Coding Conventions for all Sun Systems
In-line templates should be coded as expansions of C-compatible proce-
dure calls, with the difference that the return address cannot be
depended upon to be in the expected place, since no call instruction
will have been executed. See FILES, below, for examples.
In-line templates must conform to standard Sun parameter passing and
register usage conventions, as detailed below. They must not call rou-
tines that violate these conventions; for example, assembly language
routines such as setjmp(3V) may cause problems.
Registers other than the ones mentioned below must not be used or set.
Branch instructions in an in-line template may only transfer to numeric
labels (1f, 2b, and so on) defined within the in-line template. No
other control transfers are allowed.
Only opcodes and addressing modes generated by Sun compilers are guar-
anteed to work. Binary encodings of instructions are not supported.
Coding Conventions for Sun-2 and Sun-3 Systems
Arguments are passed in 32-bit aligned memory locations starting at
sp@. Note that there is no return address on the stack, since no jbsr
instruction will have been executed.
Results are returned in d0 or d0/d1.
The following registers may be used as temporaries: registers a0, a1,
d0, and d1 on the MC68010 and MC68020; registers fp0 and fp1 on the
MC68881; registers fpa0 through fpa3 on the Sun Floating-Point Acceler-
ator. No other registers may be used.
The template must delete exactly argsize bytes from the stack. This is
to enable inline to deal with autoincrement and autodecrement address-
ing modes, which in turn are used by c2 to delimit the lifetimes of
The stack must not underflow the level of the last argument.
Use jcc branch mnemonics instead of bcc. The bcc ops are span limited
and will fail if retargeted to a label whose span overflows the branch
Coding Conventions for Sun-4 Systems
Arguments are passed in registers %o0-%o5, followed by memory locations
starting at [%sp+0x5c]. %sp is guaranteed to be 64-bit aligned. The
contents of %o7 are undefined, since no call instruction will have been
Results are returned in %o0 or %f0/%f1.
Registers %o0-%o5 and %f0-%f31 may be used as temporaries.
Integral and single-precision floating-point arguments are 32-bit
Double-precision floating-point arguments are guaranteed to be 64-bit
aligned if their offsets are multiples of 8.
Each control-transfer instruction (branches and calls) must be immedi-
ately followed by a nop.
Call instructions must include an extra (final) argument which indi-
cates the number of registers used to pass parameters to the called
Note that for Sun-4 systems, the instruction following an expanded
'call' is inserted by inline before the expanded code to preserve the
semantics of the call's delay slot.
/usr/lib/inline in-line procedure call expander
in-line templates for software floating point
(Sun-2 and Sun-3 only)
in-line templates for switched floating point
(Sun-2 and Sun-3 only)
in-line templates for Sky FFP (Sun-2 only)
in-line templates for Motorola 68881 (Sun-3 only)
in-line templates for Sun FPA (Sun-3 only)
inline does not check for violations of the coding conventions
23 September 1987 INLINE(1)