123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748 |
- |
- | util.sa 3.7 7/29/91
- |
- | This file contains routines used by other programs.
- |
- | ovf_res: used by overflow to force the correct
- | result. ovf_r_k, ovf_r_x2, ovf_r_x3 are
- | derivatives of this routine.
- | get_fline: get user's opcode word
- | g_dfmtou: returns the destination format.
- | g_opcls: returns the opclass of the float instruction.
- | g_rndpr: returns the rounding precision.
- | reg_dest: write byte, word, or long data to Dn
- |
- |
- | Copyright (C) Motorola, Inc. 1990
- | All Rights Reserved
- |
- | For details on the license for this file, please see the
- | file, README, in this same directory.
- |UTIL idnt 2,1 | Motorola 040 Floating Point Software Package
- |section 8
- #include "fpsp.h"
- |xref mem_read
- .global g_dfmtou
- .global g_opcls
- .global g_rndpr
- .global get_fline
- .global reg_dest
- |
- | Final result table for ovf_res. Note that the negative counterparts
- | are unnecessary as ovf_res always returns the sign separately from
- | the exponent.
- | ;+inf
- EXT_PINF: .long 0x7fff0000,0x00000000,0x00000000,0x00000000
- | ;largest +ext
- EXT_PLRG: .long 0x7ffe0000,0xffffffff,0xffffffff,0x00000000
- | ;largest magnitude +sgl in ext
- SGL_PLRG: .long 0x407e0000,0xffffff00,0x00000000,0x00000000
- | ;largest magnitude +dbl in ext
- DBL_PLRG: .long 0x43fe0000,0xffffffff,0xfffff800,0x00000000
- | ;largest -ext
- tblovfl:
- .long EXT_RN
- .long EXT_RZ
- .long EXT_RM
- .long EXT_RP
- .long SGL_RN
- .long SGL_RZ
- .long SGL_RM
- .long SGL_RP
- .long DBL_RN
- .long DBL_RZ
- .long DBL_RM
- .long DBL_RP
- .long error
- .long error
- .long error
- .long error
- |
- | ovf_r_k --- overflow result calculation
- |
- | This entry point is used by kernel_ex.
- |
- | This forces the destination precision to be extended
- |
- | Input: operand in ETEMP
- | Output: a result is in ETEMP (internal extended format)
- |
- .global ovf_r_k
- ovf_r_k:
- lea ETEMP(%a6),%a0 |a0 points to source operand
- bclrb #sign_bit,ETEMP_EX(%a6)
- sne ETEMP_SGN(%a6) |convert to internal IEEE format
- |
- | ovf_r_x2 --- overflow result calculation
- |
- | This entry point used by x_ovfl. (opclass 0 and 2)
- |
- | Input a0 points to an operand in the internal extended format
- | Output a0 points to the result in the internal extended format
- |
- | This sets the round precision according to the user's FPCR unless the
- | instruction is fsgldiv or fsglmul or fsadd, fdadd, fsub, fdsub, fsmul,
- | fdmul, fsdiv, fddiv, fssqrt, fsmove, fdmove, fsabs, fdabs, fsneg, fdneg.
- | If the instruction is fsgldiv of fsglmul, the rounding precision must be
- | extended. If the instruction is not fsgldiv or fsglmul but a force-
- | precision instruction, the rounding precision is then set to the force
- | precision.
- .global ovf_r_x2
- ovf_r_x2:
- btstb #E3,E_BYTE(%a6) |check for nu exception
- beql ovf_e1_exc |it is cu exception
- ovf_e3_exc:
- movew CMDREG3B(%a6),%d0 |get the command word
- andiw #0x00000060,%d0 |clear all bits except 6 and 5
- cmpil #0x00000040,%d0
- beql ovff_sgl |force precision is single
- cmpil #0x00000060,%d0
- beql ovff_dbl |force precision is double
- movew CMDREG3B(%a6),%d0 |get the command word again
- andil #0x7f,%d0 |clear all except operation
- cmpil #0x33,%d0
- beql ovf_fsgl |fsglmul or fsgldiv
- cmpil #0x30,%d0
- beql ovf_fsgl
- bra ovf_fpcr |instruction is none of the above
- | ;use FPCR
- ovf_e1_exc:
- movew CMDREG1B(%a6),%d0 |get command word
- andil #0x00000044,%d0 |clear all bits except 6 and 2
- cmpil #0x00000040,%d0
- beql ovff_sgl |the instruction is force single
- cmpil #0x00000044,%d0
- beql ovff_dbl |the instruction is force double
- movew CMDREG1B(%a6),%d0 |again get the command word
- andil #0x0000007f,%d0 |clear all except the op code
- cmpil #0x00000027,%d0
- beql ovf_fsgl |fsglmul
- cmpil #0x00000024,%d0
- beql ovf_fsgl |fsgldiv
- bra ovf_fpcr |none of the above, use FPCR
- |
- |
- | Inst is either fsgldiv or fsglmul. Force extended precision.
- |
- ovf_fsgl:
- clrl %d0
- bra ovf_res
- ovff_sgl:
- movel #0x00000001,%d0 |set single
- bra ovf_res
- ovff_dbl:
- movel #0x00000002,%d0 |set double
- bra ovf_res
- |
- | The precision is in the fpcr.
- |
- ovf_fpcr:
- bfextu FPCR_MODE(%a6){#0:#2},%d0 |set round precision
- bra ovf_res
- |
- |
- | ovf_r_x3 --- overflow result calculation
- |
- | This entry point used by x_ovfl. (opclass 3 only)
- |
- | Input a0 points to an operand in the internal extended format
- | Output a0 points to the result in the internal extended format
- |
- | This sets the round precision according to the destination size.
- |
- .global ovf_r_x3
- ovf_r_x3:
- bsr g_dfmtou |get dest fmt in d0{1:0}
- | ;for fmovout, the destination format
- | ;is the rounding precision
- |
- | ovf_res --- overflow result calculation
- |
- | Input:
- | a0 points to operand in internal extended format
- | Output:
- | a0 points to result in internal extended format
- |
- .global ovf_res
- ovf_res:
- lsll #2,%d0 |move round precision to d0{3:2}
- bfextu FPCR_MODE(%a6){#2:#2},%d1 |set round mode
- orl %d1,%d0 |index is fmt:mode in d0{3:0}
- leal tblovfl,%a1 |load a1 with table address
- movel %a1@(%d0:l:4),%a1 |use d0 as index to the table
- jmp (%a1) |go to the correct routine
- |
- |case DEST_FMT = EXT
- |
- EXT_RN:
- leal EXT_PINF,%a1 |answer is +/- infinity
- bsetb #inf_bit,FPSR_CC(%a6)
- bra set_sign |now go set the sign
- EXT_RZ:
- leal EXT_PLRG,%a1 |answer is +/- large number
- bra set_sign |now go set the sign
- EXT_RM:
- tstb LOCAL_SGN(%a0) |if negative overflow
- beqs e_rm_pos
- e_rm_neg:
- leal EXT_PINF,%a1 |answer is negative infinity
- orl #neginf_mask,USER_FPSR(%a6)
- bra end_ovfr
- e_rm_pos:
- leal EXT_PLRG,%a1 |answer is large positive number
- bra end_ovfr
- EXT_RP:
- tstb LOCAL_SGN(%a0) |if negative overflow
- beqs e_rp_pos
- e_rp_neg:
- leal EXT_PLRG,%a1 |answer is large negative number
- bsetb #neg_bit,FPSR_CC(%a6)
- bra end_ovfr
- e_rp_pos:
- leal EXT_PINF,%a1 |answer is positive infinity
- bsetb #inf_bit,FPSR_CC(%a6)
- bra end_ovfr
- |
- |case DEST_FMT = DBL
- |
- DBL_RN:
- leal EXT_PINF,%a1 |answer is +/- infinity
- bsetb #inf_bit,FPSR_CC(%a6)
- bra set_sign
- DBL_RZ:
- leal DBL_PLRG,%a1 |answer is +/- large number
- bra set_sign |now go set the sign
- DBL_RM:
- tstb LOCAL_SGN(%a0) |if negative overflow
- beqs d_rm_pos
- d_rm_neg:
- leal EXT_PINF,%a1 |answer is negative infinity
- orl #neginf_mask,USER_FPSR(%a6)
- bra end_ovfr |inf is same for all precisions (ext,dbl,sgl)
- d_rm_pos:
- leal DBL_PLRG,%a1 |answer is large positive number
- bra end_ovfr
- DBL_RP:
- tstb LOCAL_SGN(%a0) |if negative overflow
- beqs d_rp_pos
- d_rp_neg:
- leal DBL_PLRG,%a1 |answer is large negative number
- bsetb #neg_bit,FPSR_CC(%a6)
- bra end_ovfr
- d_rp_pos:
- leal EXT_PINF,%a1 |answer is positive infinity
- bsetb #inf_bit,FPSR_CC(%a6)
- bra end_ovfr
- |
- |case DEST_FMT = SGL
- |
- SGL_RN:
- leal EXT_PINF,%a1 |answer is +/- infinity
- bsetb #inf_bit,FPSR_CC(%a6)
- bras set_sign
- SGL_RZ:
- leal SGL_PLRG,%a1 |answer is +/- large number
- bras set_sign
- SGL_RM:
- tstb LOCAL_SGN(%a0) |if negative overflow
- beqs s_rm_pos
- s_rm_neg:
- leal EXT_PINF,%a1 |answer is negative infinity
- orl #neginf_mask,USER_FPSR(%a6)
- bras end_ovfr
- s_rm_pos:
- leal SGL_PLRG,%a1 |answer is large positive number
- bras end_ovfr
- SGL_RP:
- tstb LOCAL_SGN(%a0) |if negative overflow
- beqs s_rp_pos
- s_rp_neg:
- leal SGL_PLRG,%a1 |answer is large negative number
- bsetb #neg_bit,FPSR_CC(%a6)
- bras end_ovfr
- s_rp_pos:
- leal EXT_PINF,%a1 |answer is positive infinity
- bsetb #inf_bit,FPSR_CC(%a6)
- bras end_ovfr
- set_sign:
- tstb LOCAL_SGN(%a0) |if negative overflow
- beqs end_ovfr
- neg_sign:
- bsetb #neg_bit,FPSR_CC(%a6)
- end_ovfr:
- movew LOCAL_EX(%a1),LOCAL_EX(%a0) |do not overwrite sign
- movel LOCAL_HI(%a1),LOCAL_HI(%a0)
- movel LOCAL_LO(%a1),LOCAL_LO(%a0)
- rts
- |
- | ERROR
- |
- error:
- rts
- |
- | get_fline --- get f-line opcode of interrupted instruction
- |
- | Returns opcode in the low word of d0.
- |
- get_fline:
- movel USER_FPIAR(%a6),%a0 |opcode address
- movel #0,-(%a7) |reserve a word on the stack
- leal 2(%a7),%a1 |point to low word of temporary
- movel #2,%d0 |count
- bsrl mem_read
- movel (%a7)+,%d0
- rts
- |
- | g_rndpr --- put rounding precision in d0{1:0}
- |
- | valid return codes are:
- | 00 - extended
- | 01 - single
- | 10 - double
- |
- | begin
- | get rounding precision (cmdreg3b{6:5})
- | begin
- | case opclass = 011 (move out)
- | get destination format - this is the also the rounding precision
- |
- | case opclass = 0x0
- | if E3
- | *case RndPr(from cmdreg3b{6:5} = 11 then RND_PREC = DBL
- | *case RndPr(from cmdreg3b{6:5} = 10 then RND_PREC = SGL
- | case RndPr(from cmdreg3b{6:5} = 00 | 01
- | use precision from FPCR{7:6}
- | case 00 then RND_PREC = EXT
- | case 01 then RND_PREC = SGL
- | case 10 then RND_PREC = DBL
- | else E1
- | use precision in FPCR{7:6}
- | case 00 then RND_PREC = EXT
- | case 01 then RND_PREC = SGL
- | case 10 then RND_PREC = DBL
- | end
- |
- g_rndpr:
- bsr g_opcls |get opclass in d0{2:0}
- cmpw #0x0003,%d0 |check for opclass 011
- bnes op_0x0
- |
- | For move out instructions (opclass 011) the destination format
- | is the same as the rounding precision. Pass results from g_dfmtou.
- |
- bsr g_dfmtou
- rts
- op_0x0:
- btstb #E3,E_BYTE(%a6)
- beql unf_e1_exc |branch to e1 underflow
- unf_e3_exc:
- movel CMDREG3B(%a6),%d0 |rounding precision in d0{10:9}
- bfextu %d0{#9:#2},%d0 |move the rounding prec bits to d0{1:0}
- cmpil #0x2,%d0
- beql unff_sgl |force precision is single
- cmpil #0x3,%d0 |force precision is double
- beql unff_dbl
- movew CMDREG3B(%a6),%d0 |get the command word again
- andil #0x7f,%d0 |clear all except operation
- cmpil #0x33,%d0
- beql unf_fsgl |fsglmul or fsgldiv
- cmpil #0x30,%d0
- beql unf_fsgl |fsgldiv or fsglmul
- bra unf_fpcr
- unf_e1_exc:
- movel CMDREG1B(%a6),%d0 |get 32 bits off the stack, 1st 16 bits
- | ;are the command word
- andil #0x00440000,%d0 |clear all bits except bits 6 and 2
- cmpil #0x00400000,%d0
- beql unff_sgl |force single
- cmpil #0x00440000,%d0 |force double
- beql unff_dbl
- movel CMDREG1B(%a6),%d0 |get the command word again
- andil #0x007f0000,%d0 |clear all bits except the operation
- cmpil #0x00270000,%d0
- beql unf_fsgl |fsglmul
- cmpil #0x00240000,%d0
- beql unf_fsgl |fsgldiv
- bra unf_fpcr
- |
- | Convert to return format. The values from cmdreg3b and the return
- | values are:
- | cmdreg3b return precision
- | -------- ------ ---------
- | 00,01 0 ext
- | 10 1 sgl
- | 11 2 dbl
- | Force single
- |
- unff_sgl:
- movel #1,%d0 |return 1
- rts
- |
- | Force double
- |
- unff_dbl:
- movel #2,%d0 |return 2
- rts
- |
- | Force extended
- |
- unf_fsgl:
- movel #0,%d0
- rts
- |
- | Get rounding precision set in FPCR{7:6}.
- |
- unf_fpcr:
- movel USER_FPCR(%a6),%d0 |rounding precision bits in d0{7:6}
- bfextu %d0{#24:#2},%d0 |move the rounding prec bits to d0{1:0}
- rts
- |
- | g_opcls --- put opclass in d0{2:0}
- |
- g_opcls:
- btstb #E3,E_BYTE(%a6)
- beqs opc_1b |if set, go to cmdreg1b
- opc_3b:
- clrl %d0 |if E3, only opclass 0x0 is possible
- rts
- opc_1b:
- movel CMDREG1B(%a6),%d0
- bfextu %d0{#0:#3},%d0 |shift opclass bits d0{31:29} to d0{2:0}
- rts
- |
- | g_dfmtou --- put destination format in d0{1:0}
- |
- | If E1, the format is from cmdreg1b{12:10}
- | If E3, the format is extended.
- |
- | Dest. Fmt.
- | extended 010 -> 00
- | single 001 -> 01
- | double 101 -> 10
- |
- g_dfmtou:
- btstb #E3,E_BYTE(%a6)
- beqs op011
- clrl %d0 |if E1, size is always ext
- rts
- op011:
- movel CMDREG1B(%a6),%d0
- bfextu %d0{#3:#3},%d0 |dest fmt from cmdreg1b{12:10}
- cmpb #1,%d0 |check for single
- bnes not_sgl
- movel #1,%d0
- rts
- not_sgl:
- cmpb #5,%d0 |check for double
- bnes not_dbl
- movel #2,%d0
- rts
- not_dbl:
- clrl %d0 |must be extended
- rts
- |
- |
- | Final result table for unf_sub. Note that the negative counterparts
- | are unnecessary as unf_sub always returns the sign separately from
- | the exponent.
- | ;+zero
- EXT_PZRO: .long 0x00000000,0x00000000,0x00000000,0x00000000
- | ;+zero
- SGL_PZRO: .long 0x3f810000,0x00000000,0x00000000,0x00000000
- | ;+zero
- DBL_PZRO: .long 0x3c010000,0x00000000,0x00000000,0x00000000
- | ;smallest +ext denorm
- EXT_PSML: .long 0x00000000,0x00000000,0x00000001,0x00000000
- | ;smallest +sgl denorm
- SGL_PSML: .long 0x3f810000,0x00000100,0x00000000,0x00000000
- | ;smallest +dbl denorm
- DBL_PSML: .long 0x3c010000,0x00000000,0x00000800,0x00000000
- |
- | UNF_SUB --- underflow result calculation
- |
- | Input:
- | d0 contains round precision
- | a0 points to input operand in the internal extended format
- |
- | Output:
- | a0 points to correct internal extended precision result.
- |
- tblunf:
- .long uEXT_RN
- .long uEXT_RZ
- .long uEXT_RM
- .long uEXT_RP
- .long uSGL_RN
- .long uSGL_RZ
- .long uSGL_RM
- .long uSGL_RP
- .long uDBL_RN
- .long uDBL_RZ
- .long uDBL_RM
- .long uDBL_RP
- .long uDBL_RN
- .long uDBL_RZ
- .long uDBL_RM
- .long uDBL_RP
- .global unf_sub
- unf_sub:
- lsll #2,%d0 |move round precision to d0{3:2}
- bfextu FPCR_MODE(%a6){#2:#2},%d1 |set round mode
- orl %d1,%d0 |index is fmt:mode in d0{3:0}
- leal tblunf,%a1 |load a1 with table address
- movel %a1@(%d0:l:4),%a1 |use d0 as index to the table
- jmp (%a1) |go to the correct routine
- |
- |case DEST_FMT = EXT
- |
- uEXT_RN:
- leal EXT_PZRO,%a1 |answer is +/- zero
- bsetb #z_bit,FPSR_CC(%a6)
- bra uset_sign |now go set the sign
- uEXT_RZ:
- leal EXT_PZRO,%a1 |answer is +/- zero
- bsetb #z_bit,FPSR_CC(%a6)
- bra uset_sign |now go set the sign
- uEXT_RM:
- tstb LOCAL_SGN(%a0) |if negative underflow
- beqs ue_rm_pos
- ue_rm_neg:
- leal EXT_PSML,%a1 |answer is negative smallest denorm
- bsetb #neg_bit,FPSR_CC(%a6)
- bra end_unfr
- ue_rm_pos:
- leal EXT_PZRO,%a1 |answer is positive zero
- bsetb #z_bit,FPSR_CC(%a6)
- bra end_unfr
- uEXT_RP:
- tstb LOCAL_SGN(%a0) |if negative underflow
- beqs ue_rp_pos
- ue_rp_neg:
- leal EXT_PZRO,%a1 |answer is negative zero
- oril #negz_mask,USER_FPSR(%a6)
- bra end_unfr
- ue_rp_pos:
- leal EXT_PSML,%a1 |answer is positive smallest denorm
- bra end_unfr
- |
- |case DEST_FMT = DBL
- |
- uDBL_RN:
- leal DBL_PZRO,%a1 |answer is +/- zero
- bsetb #z_bit,FPSR_CC(%a6)
- bra uset_sign
- uDBL_RZ:
- leal DBL_PZRO,%a1 |answer is +/- zero
- bsetb #z_bit,FPSR_CC(%a6)
- bra uset_sign |now go set the sign
- uDBL_RM:
- tstb LOCAL_SGN(%a0) |if negative overflow
- beqs ud_rm_pos
- ud_rm_neg:
- leal DBL_PSML,%a1 |answer is smallest denormalized negative
- bsetb #neg_bit,FPSR_CC(%a6)
- bra end_unfr
- ud_rm_pos:
- leal DBL_PZRO,%a1 |answer is positive zero
- bsetb #z_bit,FPSR_CC(%a6)
- bra end_unfr
- uDBL_RP:
- tstb LOCAL_SGN(%a0) |if negative overflow
- beqs ud_rp_pos
- ud_rp_neg:
- leal DBL_PZRO,%a1 |answer is negative zero
- oril #negz_mask,USER_FPSR(%a6)
- bra end_unfr
- ud_rp_pos:
- leal DBL_PSML,%a1 |answer is smallest denormalized negative
- bra end_unfr
- |
- |case DEST_FMT = SGL
- |
- uSGL_RN:
- leal SGL_PZRO,%a1 |answer is +/- zero
- bsetb #z_bit,FPSR_CC(%a6)
- bras uset_sign
- uSGL_RZ:
- leal SGL_PZRO,%a1 |answer is +/- zero
- bsetb #z_bit,FPSR_CC(%a6)
- bras uset_sign
- uSGL_RM:
- tstb LOCAL_SGN(%a0) |if negative overflow
- beqs us_rm_pos
- us_rm_neg:
- leal SGL_PSML,%a1 |answer is smallest denormalized negative
- bsetb #neg_bit,FPSR_CC(%a6)
- bras end_unfr
- us_rm_pos:
- leal SGL_PZRO,%a1 |answer is positive zero
- bsetb #z_bit,FPSR_CC(%a6)
- bras end_unfr
- uSGL_RP:
- tstb LOCAL_SGN(%a0) |if negative overflow
- beqs us_rp_pos
- us_rp_neg:
- leal SGL_PZRO,%a1 |answer is negative zero
- oril #negz_mask,USER_FPSR(%a6)
- bras end_unfr
- us_rp_pos:
- leal SGL_PSML,%a1 |answer is smallest denormalized positive
- bras end_unfr
- uset_sign:
- tstb LOCAL_SGN(%a0) |if negative overflow
- beqs end_unfr
- uneg_sign:
- bsetb #neg_bit,FPSR_CC(%a6)
- end_unfr:
- movew LOCAL_EX(%a1),LOCAL_EX(%a0) |be careful not to overwrite sign
- movel LOCAL_HI(%a1),LOCAL_HI(%a0)
- movel LOCAL_LO(%a1),LOCAL_LO(%a0)
- rts
- |
- | reg_dest --- write byte, word, or long data to Dn
- |
- |
- | Input:
- | L_SCR1: Data
- | d1: data size and dest register number formatted as:
- |
- | 32 5 4 3 2 1 0
- | -----------------------------------------------
- | | 0 | Size | Dest Reg # |
- | -----------------------------------------------
- |
- | Size is:
- | 0 - Byte
- | 1 - Word
- | 2 - Long/Single
- |
- pregdst:
- .long byte_d0
- .long byte_d1
- .long byte_d2
- .long byte_d3
- .long byte_d4
- .long byte_d5
- .long byte_d6
- .long byte_d7
- .long word_d0
- .long word_d1
- .long word_d2
- .long word_d3
- .long word_d4
- .long word_d5
- .long word_d6
- .long word_d7
- .long long_d0
- .long long_d1
- .long long_d2
- .long long_d3
- .long long_d4
- .long long_d5
- .long long_d6
- .long long_d7
- reg_dest:
- leal pregdst,%a0
- movel %a0@(%d1:l:4),%a0
- jmp (%a0)
- byte_d0:
- moveb L_SCR1(%a6),USER_D0+3(%a6)
- rts
- byte_d1:
- moveb L_SCR1(%a6),USER_D1+3(%a6)
- rts
- byte_d2:
- moveb L_SCR1(%a6),%d2
- rts
- byte_d3:
- moveb L_SCR1(%a6),%d3
- rts
- byte_d4:
- moveb L_SCR1(%a6),%d4
- rts
- byte_d5:
- moveb L_SCR1(%a6),%d5
- rts
- byte_d6:
- moveb L_SCR1(%a6),%d6
- rts
- byte_d7:
- moveb L_SCR1(%a6),%d7
- rts
- word_d0:
- movew L_SCR1(%a6),USER_D0+2(%a6)
- rts
- word_d1:
- movew L_SCR1(%a6),USER_D1+2(%a6)
- rts
- word_d2:
- movew L_SCR1(%a6),%d2
- rts
- word_d3:
- movew L_SCR1(%a6),%d3
- rts
- word_d4:
- movew L_SCR1(%a6),%d4
- rts
- word_d5:
- movew L_SCR1(%a6),%d5
- rts
- word_d6:
- movew L_SCR1(%a6),%d6
- rts
- word_d7:
- movew L_SCR1(%a6),%d7
- rts
- long_d0:
- movel L_SCR1(%a6),USER_D0(%a6)
- rts
- long_d1:
- movel L_SCR1(%a6),USER_D1(%a6)
- rts
- long_d2:
- movel L_SCR1(%a6),%d2
- rts
- long_d3:
- movel L_SCR1(%a6),%d3
- rts
- long_d4:
- movel L_SCR1(%a6),%d4
- rts
- long_d5:
- movel L_SCR1(%a6),%d5
- rts
- long_d6:
- movel L_SCR1(%a6),%d6
- rts
- long_d7:
- movel L_SCR1(%a6),%d7
- rts
- |end
|