📄 fpsymbol.h
字号:
; USAGE:;; cp_write_s reg [,LSB_reg] [,START] for floating-point operands; or cp_write_s reg, INT [,START] for integer operands;; Transferring double-precision floating-point operands - Either of; two forms is acceptable:;; cp_write_s reg; or cp_write_s reg, LSB_reg;; If LSB_reg is omitted, the LSBs are taken from the next g.p.; register.;; Ex: cp_write_s lr2 Transfers the contents of lr2 to; the most-significant half of Am29027; register S, and the contents of lr3; to the least-significant half.;; cp_write_s lr2,lr5 Transfers the contents of lr2 to; the most-significant half of Am29027; register S, and the contents of lr5; to the least-significant half.;;; Transferring single-precision floating-point operands - Use the; form:;; cp_write_s reg;;; Ex: cp_write_s lr2 Transfers the contents of lr2 to; the most-significant half of Am29027; register S, (the contents of lr3; will be transferred to the least-; significant half of register S, but; these bits are don't cares).;;; Transferring integer operands - Use the form:;; cp_write_s reg,INT;;; Ex: cp_write_s lr2,INT Transfers the contents of lr2 to; the least-significant half of Am29027; register S, (the contents of lr2; will also be transferred to the most-; significant half of register S, but; these bits are don't cares).;;; Starting an Am29027 operation - Any of the forms above may be; appended with parameter START, e.g.:;; cp_write_s lr2,START;; cp_write_s lr2,lr5,START;; cp_write_s lr2,INT,START;;;============================================================================; .macro cp_write_s,p1,p2,p3; .if $narg==0 .err .print "cp_write_s: missing parameter(s)" .endif;; .if $narg==1 store 1,CP_WRITE_S,p1,%%((&p1)+1) .exitm .endif;; .if $narg==2; .ifeqs "@p2@","INT" store 1,CP_WRITE_S,p1,p1 .exitm .endif; .ifeqs "@p2@","START" store 1,CP_WRITE_S|CP_START,p1,%%((&p1)+1) .exitm .endif; store 1,CP_WRITE_S,p1,p2 .exitm; .endif;; .if $narg==3; .ifeqs "@p2@","START" .ifeqs "@p3@","INT" store 1,CP_WRITE_S|CP_START,p1,p1 .else .err .print "cp_write_s: bad parameter list" .endif .exitm .endif; .ifeqs "@p2@","INT" .ifeqs "@p3@","START" store 1,CP_WRITE_S|CP_START,p1,p1 .else .err .print "cp_write_s: bad parameter list" .endif .exitm .endif; .ifeqs "@p3@","START" store 1,CP_WRITE_S|CP_START,p1,p2 .else .err .print "cp_write_s: bad parameter list" .endif .exitm; .endif;; .if $narg>=4 .err .print "cp_write_s: too many parameters" .endif; .endm;;;;;============================================================================; MACRO NAME: cp_write_rs;; WRITTEN BY: Bob Perlman;; MOST RECENT UPDATE: April 16, 1988;; FUNCTION: Transfers two 32-bit floating-point operands to Am29027; input registers R and S;; PARAMETERS:; reg1 - the Am29000 g.p. register containing the 32-bit operand to be; transferred to register R;; reg2 - the Am29000 g.p. register containing the 32-bit operand to be; transferred to register S;; START - indicates that a new Am29027 operation is to be started; once the operands have been transferred;;; USAGE:;; cp_write_rs reg1, reg2 [,START];; Ex: cp_write_rs lr2,lr5 Transfers the contents of lr2 to; the most-significant half of Am29027; register R, and the contents of lr5; to the most-significant half of Am29027; register S.;; cp_write_rs lr2,lr5,START Transfers the contents of lr2 to; the most-significant half of Am29027; register R, and the contents of lr5; to the most-significant half of Am29027; register S; a new operation is started; once the transfer is complete.;;;;============================================================================; .macro cp_write_rs,p1,p2,p3;; .if $narg<=1 .err .print "cp_write_rs: missing parameter(s)" .exitm .endif;; .if $narg==2 .ifeqs "@p2@","START" .err .print "cp_write_rs: bad parameter list" .else store 1,CP_WRITE_RS,p1,p2 .endif .exitm .endif;; .if $narg==3 .ifeqs "@p3@","START" store 1,CP_WRITE_RS|CP_START,p1,p2 .else .err .print "cp_write_rs: bad parameter list" .endif .exitm .endif;; .if $narg>=4 .err .print "cp_write_rs: too many parameters" .exitm .endif; .endm;;;;;;;============================================================================; MACRO NAME: cp_write_prec;; WRITTEN BY: Bob Perlman;; MOST RECENT UPDATE: April 16, 1988;; FUNCTION: Transfers a word to the Am29027 precision register;; PARAMETERS:; reg - the Am29000 g.p. register containing the word to be; transferred to the Am29027 precision register;; USAGE:;; cp_write_prec reg;; Ex: cp_write_prec lr2 Transfers the contents of lr2 to; the Am29027 precision register.;;;============================================================================; .macro cp_write_prec,p1;; .if $narg!=1 .err .print "cp_write_prec: bad parameter list" .else store 1,CP_WRITE_PREC,p1,0 .endif; .endm;;;;;;;============================================================================; MACRO NAME: cp_write_status;; WRITTEN BY: Bob Perlman;; MOST RECENT UPDATE: April 16, 1988;; FUNCTION: Transfers a word to the Am29027 precision register;; PARAMETERS:; reg - the Am29000 g.p. register containing the word to be; transferred to the Am29027 status register;; RESTORE - indicates that this is the last step of a state restoration; sequence (flow-through mode only);; INVALIDATE - indicates that the current contents of the ALU pipeline; register are to be invalidated (pipeline mode only);; USAGE:;; cp_write_status reg [,RESTORE|INVALIDATE];; Ex: cp_write_status lr2 Transfers the contents of lr2 to; the Am29027 status register.;;; cp_write_status lr2,RESTORE Transfers the contents of lr2 to; the Am29027 status register, and; completes the state restore; sequence;; cp_write_status lr2,INVALIDATE Transfers the contents of lr2 to; the Am29027 status register, and; invalidates the contents of the; ALU pipeline.;;;============================================================================; .macro cp_write_status,p1,p2; .if $narg==0 .err .print "cp_write_status: missing parameter(s)" .endif;; .if $narg==1 store 1,CP_WRITE_STATUS,p1,0 .exitm .endif;; .if $narg==2; .ifeqs "@p2@","RESTORE" store 1,CP_WRITE_STATUS|CP_START,p1,0 .exitm .endif; .ifeqs "@p2@","INVALIDATE" store 1,CP_WRITE_STATUS|CP_START,p1,0 .exitm .endif; .err .print "cp_write_status: bad parameter list" .exitm; .endif;; .if $narg >=3 .err .print "cp_write_status: too many parameters" .exitm .endif; .endm;;;;;;============================================================================; MACRO NAME: cp_write_inst;; WRITTEN BY: Bob Perlman;; MOST RECENT UPDATE: April 16, 1988;; FUNCTION: Transfers an instruction word to the Am29027 instruction; register;; PARAMETERS:; reg - the Am29000 g.p. register containing the word to be; transferred to the Am29027 instruction register;; START - indicates that a new Am29027 operation is to be started; once the instruction word has been transferred;; USAGE:;; cp_write_inst reg [,START];; Ex: cp_write_inst lr2 Transfers the contents of lr2 to; the Am29027 instruction register.;;; cp_write_inst lr2,START Transfers the contents of lr2 to; the Am29027 status register; a; new operation is started once the; transfer is complete.;;;============================================================================; .macro cp_write_inst,p1,p2; .if $narg==0 .err .print "cp_write_inst: missing parameter(s)" .endif;; .if $narg==1 store 1,CP_WRITE_INST,p1,p1 .exitm .endif;; .if $narg==2; .ifeqs "@p2@","START" store 1,CP_WRITE_INST|CP_START,p1,p1 .else .err .print "cp_write_inst: bad parameter list" .endif .exitm;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -