Reference Guide

Chapter 4 65
Assembler Directives and Pseudo-Operations
.CALL Directive
; This program calls printf() with four arguments
; whose register locations are described in the .CALL directive.
; The format string goes into arg0, not to be relocated.
; The string “message” goes into arg1, specified as a general register.
; The floating-point value 57005.57005 goes into farg2,
; specified as a floating-point register.
; The hexadecimal number 0xf00d goes into arg3,
; specified as a general register.
; The return value from printf() is not to be relocated.
.LIT
.ALIGN 8
.WORD 1197387154 ; floating-point literal
.BLOCKZ 12
fp2 .WORD 0
.CODE
main
.PROC
.CALLINFO CALLER,FRAME=24,SAVE_RP
.ENTER
LDIL L’fp2,%r1
LDO R’fp2(1),%r31 ; r31 < - floating-point literal address
FLDWS -16(%r31),%fr4
LDO -64(%sp),%r19
FSTWS %fr4,0(%r19)
ADDIL L’61453,0
LDO R’61453(%r1),%r20
STW %r20,-68(%sp) ; end of stacking floating-point address
ADDIL L’string_area-$global$,%dp
LDO R’string_area-$global$(%r1),%r21 ; point to “message”
STW %r21,-60(%sp) ; stack “message” address
LDO -64(%sp),%r22
FLDWS 0(%r22),%fr5
FCNVFF,SGL,DBL %fr5,%fr6 ; convert floating-point value
ADDIL L’string_area-$global$+8,%dp
LDO R’string_area-$global$+8(%r1),%arg0
;point to format string
LDW -60(%sp),%arg1 ; load “message” argument
FSTDS 38,-16(%sp)
FLDWS -12(%sp),%fr6 ; load floating-point argument
LDWS -16(%sp),%arg3 ; load hexadecimal argument
LDW -68(%sp),%r1
STW %r1,-52(%sp)
.CALL argw0=no,argw1=gr,argw2=fr,argw3=gr,rtnval=no
BL printf,2
NOP
.LEAVE