home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 4 / DATAFILE_PDCD4.iso / unix / unixlib36d / src / sys / s / _syslib < prev    next >
Encoding:
Text File  |  1994-02-27  |  14.3 KB  |  604 lines

  1. ;       /* _syslib.s (c) Copyright 1990 H.Rogers */
  2.  
  3.         GET     @.src.sys.s.asm_dec
  4.  
  5.         AREA    |C$$code|,CODE,READONLY
  6.  
  7.         ENTRY
  8.  
  9.         IMPORT  |_main|
  10.         EXPORT  |__main|
  11.  
  12.         NAME    __main
  13. |__main|
  14.         SWI     &20010                  ; OS_GetEnv
  15.         MOV     sp,a2
  16.         SUB     sl,sp,#2048
  17.  
  18.         LDR     a4,[pc,#|__cli_ptr|-.-8]
  19.         STR     a1,[a4,#0]
  20.         LDR     a4,[pc,#|__himem_ptr|-.-8]
  21.         STR     a2,[a4,#0]
  22.         LDR     a4,[pc,#|__stack_ptr|-.-8]
  23.         STR     sl,[a4,#0]
  24.         LDMIA   a3,{a1,a2}
  25.         AND     a2,a2,#&ff
  26.         LDR     a3,[pc,#|__time_ptr|-.-8]
  27.         STMIA   a3,{a1,a2}
  28.         LDR     a4,[pc,#|__robase_ptr|-.-8]
  29.         LDR     a1,[a4,#0]
  30.         LDR     a4,[pc,#|__base_ptr|-.-8]
  31.         STR     a1,[a4,#0]
  32.         LDR     a4,[pc,#|__rwlimit_ptr|-.-8]
  33.         LDR     a1,[a4,#0]
  34.         LDR     a4,[pc,#|__lomem_ptr|-.-8]
  35.         STR     a1,[a4,#0]
  36.         LDR     a4,[pc,#|__break_ptr|-.-8]
  37.         STR     a1,[a4,#0]
  38.  
  39.         CMP     sl,a1
  40.         MOVLSS  pc,lr                   ; no stack - exit fast
  41.         ADD     sl,sl,#256
  42.         MOV     fp,#0
  43.         LDR     a1,[pc,#|__alloca_list_ptr|-.-8]
  44.         CMP     a1,#0
  45.         STRNE   fp,[a1,#0]
  46.         B       |_main|
  47.  
  48.  
  49.         IMPORT  |Image$$RO$$Base|
  50.         IMPORT  |Image$$RW$$Base|
  51.         IMPORT  |Image$$RW$$Limit|
  52.  
  53.         EXPORT  |__svccli|      ; copy CLI in SVC mode
  54.  
  55.         NAME    __svccli
  56. |__svccli|
  57.         LDR     a2,[pc,#|__cli_ptr|-.-8]
  58.         LDR     a2,[a2,#0]
  59.         MOV     a4,lr
  60.         SWI     &16             ; OS_EnterOS
  61. |__svccli_l0|
  62.         LDRBT   a3,[a2],#1
  63.         STRBT   a3,[a1],#1
  64.         CMP     a3,#0
  65.         BNE     |__svccli_l0|
  66.         MOVS    pc,a4           ; return to USR mode
  67.  
  68. |__cli_ptr|
  69.         DCD     |__cli|
  70.  
  71. |__robase_ptr|
  72.         DCD     |__robase|
  73. |__base_ptr|
  74.         DCD     |__base|
  75. |__rwbase_ptr|
  76.         DCD     |__rwbase|
  77. |__rwlimit_ptr|
  78.         DCD     |__rwlimit|
  79. |__himem_ptr|
  80.         DCD     |__himem|
  81. |__lomem_ptr|
  82.         DCD     |__lomem|
  83.  
  84. |__break_ptr|
  85.         DCD     |__break|
  86. |__stack_ptr|
  87.         DCD     |__stack|
  88.  
  89. |__time_ptr|
  90.         DCD     |__time|
  91.  
  92.         IMPORT  |__alloca_list|,WEAK
  93. |__alloca_list_ptr|
  94.         DCD     |__alloca_list|
  95.  
  96.         IMPORT  |__uname_dont_pack|,WEAK
  97.         EXPORT  |__uname_dont_pack_ptr|
  98. |__uname_dont_pack_ptr|
  99.         DCD     |__uname_dont_pack|
  100.  
  101.  
  102.         EXPORT  |__exit|
  103.  
  104.         NAME    __exit
  105. |__exit|
  106.         MOV     a3,a1
  107.         LDR     a2,[pc,#|__exit_word|-.-8]
  108.         MOV     a1,#0
  109.  
  110.         SWI     &11                     ; OS_Exit - never returns
  111.  
  112. |__exit_word|
  113.         DCD     &58454241
  114.  
  115.  
  116.         IMPORT  |__vret|,WEAK
  117.         EXPORT  |___vret|
  118. |___vret|
  119.         DCD     |__vret|
  120.  
  121.         IMPORT  |__stdioinit|,WEAK
  122.         EXPORT  |___stdioinit|
  123. |___stdioinit|
  124.         DCD     |__stdioinit|
  125.  
  126.         IMPORT  |__stdioexit|,WEAK
  127.         EXPORT  |___stdioexit|
  128. |___stdioexit|
  129.         DCD     |__stdioexit|
  130.  
  131.         IMPORT  |___main|, WEAK
  132.         EXPORT  |___do_global_ctors|
  133. |___do_global_ctors|
  134.         DCD     |___main|
  135.  
  136.  
  137.         EXPORT  |__rdenv|
  138.  
  139.         NAME    __rdenv
  140. |__rdenv|
  141.         MOV     ip,a2
  142.         MOV     a2,#0
  143.         MOV     a3,#0
  144.         MOV     a4,#0
  145.  
  146.         SWI     &20040
  147.  
  148.         STMVCIA ip,{a2,a3,a4}
  149.         MOVVC   a1,#0
  150.  
  151.         MOVS    pc,lr
  152.  
  153.         EXPORT  |__wrenv|
  154.  
  155.         NAME    __wrenv
  156. |__wrenv|
  157.         LDMIA   a2,{a2,a3,a4}
  158.  
  159.         SWI     &20040
  160.  
  161.         MOVVC   a1,#0
  162.  
  163.         MOVS    pc,lr
  164.  
  165.  
  166.         EXPORT  |x$divtest|
  167. |x$divtest|
  168.         MOVS    pc,lr
  169.  
  170.         EXPORT  |x$remainder|
  171.  
  172.         NAME    x$remainder
  173. |x$remainder|
  174.         STMFD   sp!,{lr}
  175.         BL      |x$divide|
  176.         MOV     a1,a2
  177.         LDMFD   sp!,{pc}^
  178.  
  179.         EXPORT  |x$uremainder|
  180.  
  181.         NAME    x$uremainder
  182. |x$uremainder|
  183.         STMFD   sp!,{lr}
  184.         BL      |x$udivide|
  185.         MOV     a1,a2
  186.         LDMFD   sp!,{pc}^
  187.  
  188. |x$overflow|
  189.         MVN     a1,#0
  190.         MOVS    pc,lr
  191.  
  192.         EXPORT  |x$udivide|     ; a1 = a2 / a1; a2 = a2 % a1
  193.  
  194.         NAME    x$udivide
  195. |x$udivide|
  196.         CMP     a1,#1
  197.         BLO     |x$overflow|
  198.         BEQ     |x$divide_l0|
  199.         MOV     ip,#0
  200.         MOVS    a2,a2
  201.         BPL     |x$divide_l1|
  202.         ORR     ip,ip,#&20000000; ip bit &20000000 = -ve a2
  203.         MOVS    a2,a2,LSR #1
  204.         ORRCS   ip,ip,#&10000000; ip bit &10000000 = bit 0 of a2
  205.         B       |x$divide_l1|
  206.  
  207. |x$divide_l0|                   ; a1 == 1
  208.         MOV     a1,a2
  209.         MOV     a2,#0
  210.         MOVS    pc,lr
  211.  
  212.         EXPORT  |x$divide|      ; a1 = a2 / a1; a2 = a2 % a1
  213.  
  214.         NAME    x$divide
  215. |x$divide|
  216.         CMP     a1,#1
  217.         BLO     |x$overflow|
  218.         BEQ     |x$divide_l0|
  219.         ANDS    ip,a1,#&80000000
  220.         RSBMI   a1,a1,#0
  221.         ANDS    a3,a2,#&80000000
  222.         EOR     ip,ip,a3
  223.         RSBMI   a2,a2,#0
  224.         ORR     ip,a3,ip,LSR #1 ; ip bit &40000000 = -ve division
  225.                                 ; ip bit &80000000 = -ve remainder
  226.  
  227. |x$divide_l1|
  228.         MOV     a3,#1
  229.         MOV     a4,#0
  230.  
  231.         CMP     a2,a1
  232.         BLO     |x$divide_b0|
  233.         CMP     a2,a1,LSL #1
  234.         BLO     |x$divide_b1|
  235.         CMP     a2,a1,LSL #2
  236.         BLO     |x$divide_b2|
  237.         CMP     a2,a1,LSL #3
  238.         BLO     |x$divide_b3|
  239.         CMP     a2,a1,LSL #4
  240.         BLO     |x$divide_b4|
  241.         CMP     a2,a1,LSL #5
  242.         BLO     |x$divide_b5|
  243.         CMP     a2,a1,LSL #6
  244.         BLO     |x$divide_b6|
  245.         CMP     a2,a1,LSL #7
  246.         BLO     |x$divide_b7|
  247.         CMP     a2,a1,LSL #8
  248.         BLO     |x$divide_b8|
  249.         CMP     a2,a1,LSL #9
  250.         BLO     |x$divide_b9|
  251.         CMP     a2,a1,LSL #10
  252.         BLO     |x$divide_b10|
  253.         CMP     a2,a1,LSL #11
  254.         BLO     |x$divide_b11|
  255.         CMP     a2,a1,LSL #12
  256.         BLO     |x$divide_b12|
  257.         CMP     a2,a1,LSL #13
  258.         BLO     |x$divide_b13|
  259.         CMP     a2,a1,LSL #14
  260.         BLO     |x$divide_b14|
  261.         CMP     a2,a1,LSL #15
  262.         BLO     |x$divide_b15|
  263.         CMP     a2,a1,LSL #16
  264.         BLO     |x$divide_b16|
  265.         CMP     a2,a1,LSL #17
  266.         BLO     |x$divide_b17|
  267.         CMP     a2,a1,LSL #18
  268.         BLO     |x$divide_b18|
  269.         CMP     a2,a1,LSL #19
  270.         BLO     |x$divide_b19|
  271.         CMP     a2,a1,LSL #20
  272.         BLO     |x$divide_b20|
  273.         CMP     a2,a1,LSL #21
  274.         BLO     |x$divide_b21|
  275.         CMP     a2,a1,LSL #22
  276.         BLO     |x$divide_b22|
  277.         CMP     a2,a1,LSL #23
  278.         BLO     |x$divide_b23|
  279.         CMP     a2,a1,LSL #24
  280.         BLO     |x$divide_b24|
  281.         CMP     a2,a1,LSL #25
  282.         BLO     |x$divide_b25|
  283.         CMP     a2,a1,LSL #26
  284.         BLO     |x$divide_b26|
  285.         CMP     a2,a1,LSL #27
  286.         BLO     |x$divide_b27|
  287.         CMP     a2,a1,LSL #28
  288.         BLO     |x$divide_b28|
  289.         CMP     a2,a1,LSL #29
  290.         BLO     |x$divide_b29|
  291.         CMP     a2,a1,LSL #30
  292.         BLO     |x$divide_b30|
  293.         CMP     a2,a1,LSL #31
  294.         SUBHS   a2,a2,a1,LSL #31
  295.         ADDHS   a4,a4,a3,LSL #31
  296.         CMP     a2,a1,LSL #30
  297.         SUBHS   a2,a2,a1,LSL #30
  298.         ADDHS   a4,a4,a3,LSL #30
  299. |x$divide_b30|
  300.         CMP     a2,a1,LSL #29
  301.         SUBHS   a2,a2,a1,LSL #29
  302.         ADDHS   a4,a4,a3,LSL #29
  303. |x$divide_b29|
  304.         CMP     a2,a1,LSL #28
  305.         SUBHS   a2,a2,a1,LSL #28
  306.         ADDHS   a4,a4,a3,LSL #28
  307. |x$divide_b28|
  308.         CMP     a2,a1,LSL #27
  309.         SUBHSS  a2,a2,a1,LSL #27
  310.         ADDHS   a4,a4,a3,LSL #27
  311. |x$divide_b27|
  312.         CMP     a2,a1,LSL #26
  313.         SUBHS   a2,a2,a1,LSL #26
  314.         ADDHS   a4,a4,a3,LSL #26
  315. |x$divide_b26|
  316.         CMP     a2,a1,LSL #25
  317.         SUBHS   a2,a2,a1,LSL #25
  318.         ADDHS   a4,a4,a3,LSL #25
  319. |x$divide_b25|
  320.         CMP     a2,a1,LSL #24
  321.         SUBHS   a2,a2,a1,LSL #24
  322.         ADDHS   a4,a4,a3,LSL #24
  323. |x$divide_b24|
  324.         CMP     a2,a1,LSL #23
  325.         SUBHS   a2,a2,a1,LSL #23
  326.         ADDHS   a4,a4,a3,LSL #23
  327. |x$divide_b23|
  328.         CMP     a2,a1,LSL #22
  329.         SUBHS   a2,a2,a1,LSL #22
  330.         ADDHS   a4,a4,a3,LSL #22
  331. |x$divide_b22|
  332.         CMP     a2,a1,LSL #21
  333.         SUBHS   a2,a2,a1,LSL #21
  334.         ADDHS   a4,a4,a3,LSL #21
  335. |x$divide_b21|
  336.         CMP     a2,a1,LSL #20
  337.         SUBHS   a2,a2,a1,LSL #20
  338.         ADDHS   a4,a4,a3,LSL #20
  339. |x$divide_b20|
  340.         CMP     a2,a1,LSL #19
  341.         SUBHS   a2,a2,a1,LSL #19
  342.         ADDHS   a4,a4,a3,LSL #19
  343. |x$divide_b19|
  344.         CMP     a2,a1,LSL #18
  345.         SUBHS   a2,a2,a1,LSL #18
  346.         ADDHS   a4,a4,a3,LSL #18
  347. |x$divide_b18|
  348.         CMP     a2,a1,LSL #17
  349.         SUBHS   a2,a2,a1,LSL #17
  350.         ADDHS   a4,a4,a3,LSL #17
  351. |x$divide_b17|
  352.         CMP     a2,a1,LSL #16
  353.         SUBHS   a2,a2,a1,LSL #16
  354.         ADDHS   a4,a4,a3,LSL #16
  355. |x$divide_b16|
  356.         CMP     a2,a1,LSL #15
  357.         SUBHS   a2,a2,a1,LSL #15
  358.         ADDHS   a4,a4,a3,LSL #15
  359. |x$divide_b15|
  360.         CMP     a2,a1,LSL #14
  361.         SUBHS   a2,a2,a1,LSL #14
  362.         ADDHS   a4,a4,a3,LSL #14
  363. |x$divide_b14|
  364.         CMP     a2,a1,LSL #13
  365.         SUBHS   a2,a2,a1,LSL #13
  366.         ADDHS   a4,a4,a3,LSL #13
  367. |x$divide_b13|
  368.         CMP     a2,a1,LSL #12
  369.         SUBHS   a2,a2,a1,LSL #12
  370.         ADDHS   a4,a4,a3,LSL #12
  371. |x$divide_b12|
  372.         CMP     a2,a1,LSL #11
  373.         SUBHS   a2,a2,a1,LSL #11
  374.         ADDHS   a4,a4,a3,LSL #11
  375. |x$divide_b11|
  376.         CMP     a2,a1,LSL #10
  377.         SUBHS   a2,a2,a1,LSL #10
  378.         ADDHS   a4,a4,a3,LSL #10
  379. |x$divide_b10|
  380.         CMP     a2,a1,LSL #9
  381.         SUBHS   a2,a2,a1,LSL #9
  382.         ADDHS   a4,a4,a3,LSL #9
  383. |x$divide_b9|
  384.         CMP     a2,a1,LSL #8
  385.         SUBHS   a2,a2,a1,LSL #8
  386.         ADDHS   a4,a4,a3,LSL #8
  387. |x$divide_b8|
  388.         CMP     a2,a1,LSL #7
  389.         SUBHS   a2,a2,a1,LSL #7
  390.         ADDHS   a4,a4,a3,LSL #7
  391. |x$divide_b7|
  392.         CMP     a2,a1,LSL #6
  393.         SUBHS   a2,a2,a1,LSL #6
  394.         ADDHS   a4,a4,a3,LSL #6
  395. |x$divide_b6|
  396.         CMP     a2,a1,LSL #5
  397.         SUBHS   a2,a2,a1,LSL #5
  398.         ADDHS   a4,a4,a3,LSL #5
  399. |x$divide_b5|
  400.         CMP     a2,a1,LSL #4
  401.         SUBHS   a2,a2,a1,LSL #4
  402.         ADDHS   a4,a4,a3,LSL #4
  403. |x$divide_b4|
  404.         CMP     a2,a1,LSL #3
  405.         SUBHS   a2,a2,a1,LSL #3
  406.         ADDHS   a4,a4,a3,LSL #3
  407. |x$divide_b3|
  408.         CMP     a2,a1,LSL #2
  409.         SUBHS   a2,a2,a1,LSL #2
  410.         ADDHS   a4,a4,a3,LSL #2
  411. |x$divide_b2|
  412.         CMP     a2,a1,LSL #1
  413.         SUBHS   a2,a2,a1,LSL #1
  414.         ADDHS   a4,a4,a3,LSL #1
  415. |x$divide_b1|
  416.         CMP     a2,a1
  417.         SUBHS   a2,a2,a1
  418.         ADDHS   a4,a4,a3
  419. |x$divide_b0|
  420.  
  421.         TST     ip,#&20000000
  422.         BNE     |x$udivide_l1|
  423.         MOV     a1,a4
  424.         CMP     ip,#0
  425.         RSBMI   a2,a2,#0
  426.         MOVS    ip,ip,LSL #1
  427.         RSBMI   a1,a1,#0
  428.         MOVS    pc,lr
  429.  
  430. |x$udivide_l1|
  431.         TST     ip,#&10000000
  432.         MOV     a2,a2,LSL #1
  433.         ORRNE   a2,a2,#1
  434.         MOV     a4,a4,LSL #1
  435.         CMP     a2,a1
  436.         SUBHS   a2,a2,a1
  437.         ADDHS   a4,a4,a3
  438.         MOV     a1,a4
  439.         MOVS    pc,lr
  440.  
  441.  
  442.         IMPORT  raise
  443.  
  444.         EXPORT  |x$stack_overflow|      ; allocate 512 bytes more stack
  445.  
  446.         NAME    x$stack_overflow
  447. |x$stack_overflow|
  448.         STMFD   sp!,{a1,a2,lr}
  449.         LDR     a1,[pc,#|__break_ptr|-.-8]
  450.         LDR     a1,[a1,#0]
  451.         LDR     lr,[pc,#|__stack_ptr|-.-8]
  452.         LDR     a2,[lr,#0]
  453.         SUB     a2,a2,#512
  454.         CMP     a2,a1
  455.         STR     a2,[lr,#0]
  456.         ADD     sl,a2,#256
  457.         LDMHIFD sp!,{a1,a2,pc}^
  458.         STMFD   sp!,{a3,a4,ip}
  459.         MOV     a1,#7   ; SIGEMT
  460.         BL      raise
  461.         LDMFD   sp!,{a3,a4,ip}
  462.         LDMFD   sp!,{a1,a2,pc}^
  463.  
  464.         EXPORT  |x$stack_overflow_1|    ; allocate stack to below <ip>
  465.  
  466.         NAME    x$stack_overflow_1
  467. |x$stack_overflow_1|
  468.         CMP     ip,sl                   ; sanity check
  469.         MOVHIS  pc,lr
  470.         STMFD   sp!,{a1,a2,lr}
  471.         LDR     a1,[pc,#|__break_ptr|-.-8]
  472.         LDR     a1,[a1,#0]
  473.         LDR     lr,[pc,#|__stack_ptr|-.-8]
  474.         SUB     a2,ip,#256
  475.         CMP     a2,a1
  476.         STR     a2,[lr,#0]
  477.         ADD     sl,a2,#256
  478.         LDMHIFD sp!,{a1,a2,pc}^
  479.         STMFD   sp!,{a3,a4,ip}
  480.         MOV     a1,#7   ; SIGEMT
  481.         BL      raise
  482.         LDMFD   sp!,{a3,a4,ip}
  483.         LDMFD   sp!,{a1,a2,pc}^
  484.  
  485.  
  486.         EXPORT  |_wr1chk|
  487.         EXPORT  |_wr2chk|
  488.         EXPORT  |_wr4chk|
  489. |_wr1chk|
  490. |_wr2chk|
  491. |_wr4chk|
  492.         LDR     a2,[pc,#|__rwbase_ptr|-.-8]
  493.         LDR     a2,[a2,#0]
  494.         B       |__rwNchk|
  495.  
  496.         EXPORT  |_rd1chk|
  497.         EXPORT  |_rd2chk|
  498.         EXPORT  |_rd4chk|
  499. |_rd1chk|
  500. |_rd2chk|
  501. |_rd4chk|
  502.         LDR     a2,[pc,#|__base_ptr|-.-8]
  503.         LDR     a2,[a2,#0]
  504. |__rwNchk|
  505.         CMP     a1,a2
  506.         BLO     |__rwNsegv|
  507.         LDR     a2,[pc,#|__break_ptr|-.-8]
  508.         LDR     a2,[a2,#0]
  509.         CMP     a1,a2
  510.         MOVLOS  pc,lr
  511.         LDR     a2,[pc,#|__stack_ptr|-.-8]
  512.         LDR     a2,[a2,#0]
  513.         CMP     a1,a2
  514.         BLO     |__rwNsegv|
  515.         LDR     a2,[pc,#|__himem_ptr|-.-8]
  516.         LDR     a2,[a2,#0]
  517.         CMP     a1,a2
  518.         MOVLOS  pc,lr
  519. |__rwNsegv|
  520.         MOV     a1,#11  ; SIGSEGV
  521.         B       raise
  522.  
  523.         EXPORT  |_count|
  524.  
  525.         NAME    _count
  526. |_count|
  527.         ADD     lr,lr,#8
  528.         MOVS    pc,lr
  529.  
  530.         EXPORT  |_count1|
  531.  
  532.         NAME    _count1
  533. |_count1|
  534.         ADD     lr,lr,#8
  535.         MOVS    pc,lr
  536.  
  537.  
  538.         AREA    |C$$data|
  539.  
  540.         EXPORT  |__cli|         ; CLI from OS_GetEnv
  541. |__cli|
  542.         DCD     0
  543.  
  544.         EXPORT  |__base|        ; BASE (application = 0x8000)
  545. |__robase|
  546.         DCD     |Image$$RO$$Base|
  547. |__base|
  548.         DCD     0
  549.         EXPORT  |__lomem|       ; LOMEM
  550. |__rwbase|
  551.         DCD     |Image$$RW$$Base|
  552. |__rwlimit|
  553.         DCD     |Image$$RW$$Limit|
  554. |__lomem|
  555.         DCD     0
  556.         EXPORT  |__himem|       ; HIMEM from OS_GetEnv
  557. |__himem|
  558.         DCD     0
  559.  
  560.         EXPORT  |__break|       ; the 'break'
  561. |__break|
  562.         DCD     0
  563.         EXPORT  |__stack|       ; stack limit
  564. |__stack|
  565.         DCD     0
  566.  
  567.         EXPORT  |__time|        ; start time - 5 byte format
  568. |__time|
  569.         DCD     0               ; low word
  570.         DCD     0               ; high byte
  571.  
  572.  
  573.         AREA    |C$$wrcode|,CODE
  574.  
  575.         EXPORT  |__fptest|
  576.  
  577.         NAME    __fptest
  578. |__fptest|
  579.         LDR     a1,[pc,#|__fptest_l3|-.-8]
  580.         STR     a1,[pc,#|__fptest_l1|-.-8]
  581.         B       |__fptest_l1|   ; clear pipeline
  582. |__fptest_l1|
  583.         DCD     0
  584. |__fptest_l2|
  585.         MOVS    pc,lr
  586. |__fptest_l3|
  587.         MVFD    f0,f0
  588.  
  589.         EXPORT  |__fpclr|
  590.  
  591.         NAME    __fpclr
  592. |__fpclr|
  593.         MOV     a1,#0
  594.         STR     a1,[pc,#|__fpflag|-.-8]
  595.         LDR     a1,[pc,#|__fptest_l2|-.-8]
  596.         STR     a1,[pc,#|__fptest_l1|-.-8]
  597.         MOVS    pc,lr
  598.  
  599.         EXPORT  |__fpflag|
  600. |__fpflag|
  601.         DCD     0
  602.  
  603.         END
  604.