home *** CD-ROM | disk | FTP | other *** search
/ The Datafile PD-CD 3 / PDCD_3.iso / languages / c / gnu_c / !UnixLib / src / sys / s / _syslib < prev    next >
Encoding:
Text File  |  1994-07-10  |  16.0 KB  |  669 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. ; The following symbols are added so we can use UnixLib with C v.5
  168.     EXPORT    |__rt_divtest|
  169. |x$divtest|
  170. |__rt_divtest|
  171.         MOVS    pc,lr
  172.  
  173.         EXPORT  |x$remainder|
  174.  
  175.         NAME    x$remainder
  176. |x$remainder|
  177.         STMFD   sp!,{lr}
  178.         BL      |x$divide|
  179.         MOV     a1,a2
  180.         LDMFD   sp!,{pc}^
  181.  
  182.         EXPORT  |x$uremainder|
  183.  
  184.         NAME    x$uremainder
  185. |x$uremainder|
  186.         STMFD   sp!,{lr}
  187.         BL      |x$udivide|
  188.         MOV     a1,a2
  189.         LDMFD   sp!,{pc}^
  190.  
  191. |x$overflow|
  192.         MVN     a1,#0
  193.         MOVS    pc,lr
  194.  
  195. ; Veneer to x$udivide to cater for C v.5 code generation
  196.     EXPORT  |__rt_udiv10|    ; a1 = a1 / 10; a2 = a1 % 10
  197.  
  198.     NAME    __rt_udiv10
  199. |__rt_udiv10|
  200.     MOV    a2,a1
  201.     MOV    a1,#10
  202.     B    |x$udiv10|    ; let x$udivide return for us
  203.  
  204.         EXPORT  |x$udivide|     ; a1 = a2 / a1; a2 = a2 % a1
  205. ; The following symbols are added so we can use UnixLib with C v.5
  206.     EXPORT    |__rt_udiv|
  207.  
  208.         NAME    x$udivide
  209. |x$udivide|
  210. |__rt_udiv|
  211.         CMP     a1,#1
  212.         BLO     |x$overflow|
  213.         BEQ     |x$divide_l0|
  214. |x$udiv10|
  215.         MOV     ip,#0
  216.         MOVS    a2,a2
  217.         BPL     |x$divide_l1|
  218.         ORR     ip,ip,#&20000000; ip bit &20000000 = -ve a2
  219.         MOVS    a2,a2,LSR #1
  220.         ORRCS   ip,ip,#&10000000; ip bit &10000000 = bit 0 of a2
  221.         B       |x$divide_l1|
  222.  
  223. |x$divide_l0|                   ; a1 == 1
  224.         MOV     a1,a2
  225.         MOV     a2,#0
  226.         MOVS    pc,lr
  227.  
  228. ; Veneer to x$divide to cater for C v.5 code generation
  229.     EXPORT  |__rt_sdiv10|    ; a1 = a1 / 10; a2 = a1 % 10
  230.  
  231.     NAME    __rt_sdiv10
  232. |__rt_sdiv10|
  233.     MOV    a2,a1
  234.     MOV    a1,#10
  235.     B    |x$sdiv10|    ; let x$divide return for us
  236.  
  237.         EXPORT  |x$divide|      ; a1 = a2 / a1; a2 = a2 % a1
  238. ; The following symbols are added so we can use UnixLib with C v.5
  239.     EXPORT  |__rt_sdiv|
  240.  
  241.         NAME    x$divide
  242. |x$divide|
  243. |__rt_sdiv|
  244.         CMP     a1,#1
  245.         BLO     |x$overflow|
  246.         BEQ     |x$divide_l0|
  247. |x$sdiv10|
  248.         ANDS    ip,a1,#&80000000
  249.         RSBMI   a1,a1,#0
  250.         ANDS    a3,a2,#&80000000
  251.         EOR     ip,ip,a3
  252.         RSBMI   a2,a2,#0
  253.         ORR     ip,a3,ip,LSR #1 ; ip bit &40000000 = -ve division
  254.                                 ; ip bit &80000000 = -ve remainder
  255.  
  256. |x$divide_l1|
  257.         MOV     a3,#1
  258.         MOV     a4,#0
  259.  
  260.         CMP     a2,a1
  261.         BLO     |x$divide_b0|
  262.         CMP     a2,a1,LSL #1
  263.         BLO     |x$divide_b1|
  264.         CMP     a2,a1,LSL #2
  265.         BLO     |x$divide_b2|
  266.         CMP     a2,a1,LSL #3
  267.         BLO     |x$divide_b3|
  268.         CMP     a2,a1,LSL #4
  269.         BLO     |x$divide_b4|
  270.         CMP     a2,a1,LSL #5
  271.         BLO     |x$divide_b5|
  272.         CMP     a2,a1,LSL #6
  273.         BLO     |x$divide_b6|
  274.         CMP     a2,a1,LSL #7
  275.         BLO     |x$divide_b7|
  276.         CMP     a2,a1,LSL #8
  277.         BLO     |x$divide_b8|
  278.         CMP     a2,a1,LSL #9
  279.         BLO     |x$divide_b9|
  280.         CMP     a2,a1,LSL #10
  281.         BLO     |x$divide_b10|
  282.         CMP     a2,a1,LSL #11
  283.         BLO     |x$divide_b11|
  284.         CMP     a2,a1,LSL #12
  285.         BLO     |x$divide_b12|
  286.         CMP     a2,a1,LSL #13
  287.         BLO     |x$divide_b13|
  288.         CMP     a2,a1,LSL #14
  289.         BLO     |x$divide_b14|
  290.         CMP     a2,a1,LSL #15
  291.         BLO     |x$divide_b15|
  292.         CMP     a2,a1,LSL #16
  293.         BLO     |x$divide_b16|
  294.         CMP     a2,a1,LSL #17
  295.         BLO     |x$divide_b17|
  296.         CMP     a2,a1,LSL #18
  297.         BLO     |x$divide_b18|
  298.         CMP     a2,a1,LSL #19
  299.         BLO     |x$divide_b19|
  300.         CMP     a2,a1,LSL #20
  301.         BLO     |x$divide_b20|
  302.         CMP     a2,a1,LSL #21
  303.         BLO     |x$divide_b21|
  304.         CMP     a2,a1,LSL #22
  305.         BLO     |x$divide_b22|
  306.         CMP     a2,a1,LSL #23
  307.         BLO     |x$divide_b23|
  308.         CMP     a2,a1,LSL #24
  309.         BLO     |x$divide_b24|
  310.         CMP     a2,a1,LSL #25
  311.         BLO     |x$divide_b25|
  312.         CMP     a2,a1,LSL #26
  313.         BLO     |x$divide_b26|
  314.         CMP     a2,a1,LSL #27
  315.         BLO     |x$divide_b27|
  316.         CMP     a2,a1,LSL #28
  317.         BLO     |x$divide_b28|
  318.         CMP     a2,a1,LSL #29
  319.         BLO     |x$divide_b29|
  320.         CMP     a2,a1,LSL #30
  321.         BLO     |x$divide_b30|
  322.         CMP     a2,a1,LSL #31
  323.         SUBHS   a2,a2,a1,LSL #31
  324.         ADDHS   a4,a4,a3,LSL #31
  325.         CMP     a2,a1,LSL #30
  326.         SUBHS   a2,a2,a1,LSL #30
  327.         ADDHS   a4,a4,a3,LSL #30
  328. |x$divide_b30|
  329.         CMP     a2,a1,LSL #29
  330.         SUBHS   a2,a2,a1,LSL #29
  331.         ADDHS   a4,a4,a3,LSL #29
  332. |x$divide_b29|
  333.         CMP     a2,a1,LSL #28
  334.         SUBHS   a2,a2,a1,LSL #28
  335.         ADDHS   a4,a4,a3,LSL #28
  336. |x$divide_b28|
  337.         CMP     a2,a1,LSL #27
  338.         SUBHSS  a2,a2,a1,LSL #27
  339.         ADDHS   a4,a4,a3,LSL #27
  340. |x$divide_b27|
  341.         CMP     a2,a1,LSL #26
  342.         SUBHS   a2,a2,a1,LSL #26
  343.         ADDHS   a4,a4,a3,LSL #26
  344. |x$divide_b26|
  345.         CMP     a2,a1,LSL #25
  346.         SUBHS   a2,a2,a1,LSL #25
  347.         ADDHS   a4,a4,a3,LSL #25
  348. |x$divide_b25|
  349.         CMP     a2,a1,LSL #24
  350.         SUBHS   a2,a2,a1,LSL #24
  351.         ADDHS   a4,a4,a3,LSL #24
  352. |x$divide_b24|
  353.         CMP     a2,a1,LSL #23
  354.         SUBHS   a2,a2,a1,LSL #23
  355.         ADDHS   a4,a4,a3,LSL #23
  356. |x$divide_b23|
  357.         CMP     a2,a1,LSL #22
  358.         SUBHS   a2,a2,a1,LSL #22
  359.         ADDHS   a4,a4,a3,LSL #22
  360. |x$divide_b22|
  361.         CMP     a2,a1,LSL #21
  362.         SUBHS   a2,a2,a1,LSL #21
  363.         ADDHS   a4,a4,a3,LSL #21
  364. |x$divide_b21|
  365.         CMP     a2,a1,LSL #20
  366.         SUBHS   a2,a2,a1,LSL #20
  367.         ADDHS   a4,a4,a3,LSL #20
  368. |x$divide_b20|
  369.         CMP     a2,a1,LSL #19
  370.         SUBHS   a2,a2,a1,LSL #19
  371.         ADDHS   a4,a4,a3,LSL #19
  372. |x$divide_b19|
  373.         CMP     a2,a1,LSL #18
  374.         SUBHS   a2,a2,a1,LSL #18
  375.         ADDHS   a4,a4,a3,LSL #18
  376. |x$divide_b18|
  377.         CMP     a2,a1,LSL #17
  378.         SUBHS   a2,a2,a1,LSL #17
  379.         ADDHS   a4,a4,a3,LSL #17
  380. |x$divide_b17|
  381.         CMP     a2,a1,LSL #16
  382.         SUBHS   a2,a2,a1,LSL #16
  383.         ADDHS   a4,a4,a3,LSL #16
  384. |x$divide_b16|
  385.         CMP     a2,a1,LSL #15
  386.         SUBHS   a2,a2,a1,LSL #15
  387.         ADDHS   a4,a4,a3,LSL #15
  388. |x$divide_b15|
  389.         CMP     a2,a1,LSL #14
  390.         SUBHS   a2,a2,a1,LSL #14
  391.         ADDHS   a4,a4,a3,LSL #14
  392. |x$divide_b14|
  393.         CMP     a2,a1,LSL #13
  394.         SUBHS   a2,a2,a1,LSL #13
  395.         ADDHS   a4,a4,a3,LSL #13
  396. |x$divide_b13|
  397.         CMP     a2,a1,LSL #12
  398.         SUBHS   a2,a2,a1,LSL #12
  399.         ADDHS   a4,a4,a3,LSL #12
  400. |x$divide_b12|
  401.         CMP     a2,a1,LSL #11
  402.         SUBHS   a2,a2,a1,LSL #11
  403.         ADDHS   a4,a4,a3,LSL #11
  404. |x$divide_b11|
  405.         CMP     a2,a1,LSL #10
  406.         SUBHS   a2,a2,a1,LSL #10
  407.         ADDHS   a4,a4,a3,LSL #10
  408. |x$divide_b10|
  409.         CMP     a2,a1,LSL #9
  410.         SUBHS   a2,a2,a1,LSL #9
  411.         ADDHS   a4,a4,a3,LSL #9
  412. |x$divide_b9|
  413.         CMP     a2,a1,LSL #8
  414.         SUBHS   a2,a2,a1,LSL #8
  415.         ADDHS   a4,a4,a3,LSL #8
  416. |x$divide_b8|
  417.         CMP     a2,a1,LSL #7
  418.         SUBHS   a2,a2,a1,LSL #7
  419.         ADDHS   a4,a4,a3,LSL #7
  420. |x$divide_b7|
  421.         CMP     a2,a1,LSL #6
  422.         SUBHS   a2,a2,a1,LSL #6
  423.         ADDHS   a4,a4,a3,LSL #6
  424. |x$divide_b6|
  425.         CMP     a2,a1,LSL #5
  426.         SUBHS   a2,a2,a1,LSL #5
  427.         ADDHS   a4,a4,a3,LSL #5
  428. |x$divide_b5|
  429.         CMP     a2,a1,LSL #4
  430.         SUBHS   a2,a2,a1,LSL #4
  431.         ADDHS   a4,a4,a3,LSL #4
  432. |x$divide_b4|
  433.         CMP     a2,a1,LSL #3
  434.         SUBHS   a2,a2,a1,LSL #3
  435.         ADDHS   a4,a4,a3,LSL #3
  436. |x$divide_b3|
  437.         CMP     a2,a1,LSL #2
  438.         SUBHS   a2,a2,a1,LSL #2
  439.         ADDHS   a4,a4,a3,LSL #2
  440. |x$divide_b2|
  441.         CMP     a2,a1,LSL #1
  442.         SUBHS   a2,a2,a1,LSL #1
  443.         ADDHS   a4,a4,a3,LSL #1
  444. |x$divide_b1|
  445.         CMP     a2,a1
  446.         SUBHS   a2,a2,a1
  447.         ADDHS   a4,a4,a3
  448. |x$divide_b0|
  449.  
  450.         TST     ip,#&20000000
  451.         BNE     |x$udivide_l1|
  452.         MOV     a1,a4
  453.         CMP     ip,#0
  454.         RSBMI   a2,a2,#0
  455.         MOVS    ip,ip,LSL #1
  456.         RSBMI   a1,a1,#0
  457.         MOVS    pc,lr
  458.  
  459. |x$udivide_l1|
  460.         TST     ip,#&10000000
  461.         MOV     a2,a2,LSL #1
  462.         ORRNE   a2,a2,#1
  463.         MOV     a4,a4,LSL #1
  464.         CMP     a2,a1
  465.         SUBHS   a2,a2,a1
  466.         ADDHS   a4,a4,a3
  467.         MOV     a1,a4
  468.         MOVS    pc,lr
  469.  
  470.  
  471.         IMPORT  raise
  472.  
  473.         EXPORT  |x$stack_overflow|      ; allocate 512 bytes more stack
  474. ; The following symbols are added so we can use UnixLib with C v.5
  475.     EXPORT  |__rt_stkovf_split_small|
  476.  
  477.         NAME    x$stack_overflow
  478. |x$stack_overflow|
  479. |__rt_stkovf_split_small|
  480.         STMFD   sp!,{a1,a2,lr}
  481.         LDR     a1,[pc,#|__break_ptr|-.-8]
  482.         LDR     a1,[a1,#0]
  483.         LDR     lr,[pc,#|__stack_ptr|-.-8]
  484.         LDR     a2,[lr,#0]
  485.         SUB     a2,a2,#512
  486.         CMP     a2,a1
  487.         STR     a2,[lr,#0]
  488.         ADD     sl,a2,#256
  489.         LDMHIFD sp!,{a1,a2,pc}^
  490.         STMFD   sp!,{a3,a4,ip}
  491.         MOV     a1,#7   ; SIGEMT
  492.         BL      raise
  493.         LDMFD   sp!,{a3,a4,ip}
  494.         LDMFD   sp!,{a1,a2,pc}^
  495.  
  496.         EXPORT  |x$stack_overflow_1|    ; allocate stack to below <ip>
  497. ; The following symbols are added so we can use UnixLib with C v.5
  498.     EXPORT  |__rt_stkovf_split_big|
  499.  
  500.         NAME    x$stack_overflow_1
  501. |x$stack_overflow_1|
  502. |__rt_stkovf_split_big|
  503.         CMP     ip,sl                   ; sanity check
  504.         MOVHIS  pc,lr
  505.         STMFD   sp!,{a1,a2,lr}
  506.         LDR     a1,[pc,#|__break_ptr|-.-8]
  507.         LDR     a1,[a1,#0]
  508.         LDR     lr,[pc,#|__stack_ptr|-.-8]
  509.         SUB     a2,ip,#256
  510.         CMP     a2,a1
  511.         STR     a2,[lr,#0]
  512.         ADD     sl,a2,#256
  513.         LDMHIFD sp!,{a1,a2,pc}^
  514.         STMFD   sp!,{a3,a4,ip}
  515.         MOV     a1,#7   ; SIGEMT
  516.         BL      raise
  517.         LDMFD   sp!,{a3,a4,ip}
  518.         LDMFD   sp!,{a1,a2,pc}^
  519.  
  520.  
  521.         EXPORT  |_wr1chk|
  522.         EXPORT  |_wr2chk|
  523.         EXPORT  |_wr4chk|
  524. ; The following symbols are added so we can use UnixLib with C v.5
  525.     EXPORT  |__rt_wr1chk|
  526.     EXPORT  |__rt_wr2chk|
  527.     EXPORT  |__rt_wr4chk|
  528. |__rt_wr1chk|
  529. |_wr1chk|
  530.         BIC     a1,a1,#1   ; Ensure address is half word aligned
  531. |__rt_wr2chk|
  532. |_wr2chk|
  533.         TST     a1,#1
  534.         BNE     |__rwNsegv|
  535.         BIC     a1,a1,#2   ; Ensure address is full word aligned
  536.  
  537. |__rt_wr4chk|
  538. |_wr4chk|
  539.         TST     a1,#2
  540.         BNE     |__rwNsegv|
  541.  
  542.         LDR     a2,[pc,#|__rwbase_ptr|-.-8]
  543.         LDR     a2,[a2,#0]
  544.         B       |__rwNchk|
  545.  
  546.         EXPORT  |_rd1chk|
  547.         EXPORT  |_rd2chk|
  548.         EXPORT  |_rd4chk|
  549. ; The following symbols are added so we can use UnixLib with C v.5
  550.     EXPORT  |__rt_rd1chk|
  551.     EXPORT  |__rt_rd2chk|
  552.     EXPORT  |__rt_rd4chk|
  553.  
  554. |__rt_rd1chk|
  555. |_rd1chk|
  556.         BIC     a1,a1,#1 ; Ensure address is half word aligned
  557. |__rt_rd2chk|
  558. |_rd2chk|
  559.         TST     a1,#1
  560.         BNE     |__rwNsegv|
  561.         BIC     a1,a1,#2 ; Ensure address is full word aligned
  562. |__rt_rd4chk|
  563. |_rd4chk|
  564.         TST     a1,#2
  565.         BNE     |__rwNsegv|
  566.  
  567.         LDR     a2,[pc,#|__base_ptr|-.-8]
  568.         LDR     a2,[a2,#0]
  569. |__rwNchk|
  570.         CMP     a1,a2
  571.         BLO     |__rwNsegv|
  572.         LDR     a2,[pc,#|__break_ptr|-.-8]
  573.         LDR     a2,[a2,#0]
  574.         CMP     a1,a2
  575.         MOVLOS  pc,lr
  576.         LDR     a2,[pc,#|__stack_ptr|-.-8]
  577.         LDR     a2,[a2,#0]
  578.         CMP     a1,a2
  579.         BLO     |__rwNsegv|
  580.         LDR     a2,[pc,#|__himem_ptr|-.-8]
  581.         LDR     a2,[a2,#0]
  582.         CMP     a1,a2
  583.         MOVLOS  pc,lr
  584. |__rwNsegv|
  585.         MOV     a1,#11  ; SIGSEGV
  586.         B       raise
  587.  
  588.         EXPORT  |_count|
  589.  
  590.         NAME    _count
  591. |_count|
  592.         ADD     lr,lr,#8
  593.         MOVS    pc,lr
  594.  
  595.         EXPORT  |_count1|
  596.  
  597.         NAME    _count1
  598. |_count1|
  599.         ADD     lr,lr,#8
  600.         MOVS    pc,lr
  601.  
  602.  
  603.         AREA    |C$$data|
  604.  
  605.         EXPORT  |__cli|         ; CLI from OS_GetEnv
  606. |__cli|
  607.         DCD     0
  608.  
  609.         EXPORT  |__base|        ; BASE (application = 0x8000)
  610. |__robase|
  611.         DCD     |Image$$RO$$Base|
  612. |__base|
  613.         DCD     0
  614.         EXPORT  |__lomem|       ; LOMEM
  615. |__rwbase|
  616.         DCD     |Image$$RW$$Base|
  617. |__rwlimit|
  618.         DCD     |Image$$RW$$Limit|
  619. |__lomem|
  620.         DCD     0
  621.         EXPORT  |__himem|       ; HIMEM from OS_GetEnv
  622. |__himem|
  623.         DCD     0
  624.  
  625.         EXPORT  |__break|       ; the 'break'
  626. |__break|
  627.         DCD     0
  628.         EXPORT  |__stack|       ; stack limit
  629. |__stack|
  630.         DCD     0
  631.  
  632.         EXPORT  |__time|        ; start time - 5 byte format
  633. |__time|
  634.         DCD     0               ; low word
  635.         DCD     0               ; high byte
  636.  
  637.  
  638.         AREA    |C$$wrcode|,CODE
  639.  
  640.         EXPORT  |__fptest|
  641.  
  642.         NAME    __fptest
  643. |__fptest|
  644.         LDR     a1,[pc,#|__fptest_l3|-.-8]
  645.         STR     a1,[pc,#|__fptest_l1|-.-8]
  646.         B       |__fptest_l1|   ; clear pipeline
  647. |__fptest_l1|
  648.         DCD     0
  649. |__fptest_l2|
  650.         MOVS    pc,lr
  651. |__fptest_l3|
  652.         MVFD    f0,f0
  653.  
  654.         EXPORT  |__fpclr|
  655.  
  656.         NAME    __fpclr
  657. |__fpclr|
  658.         MOV     a1,#0
  659.         STR     a1,[pc,#|__fpflag|-.-8]
  660.         LDR     a1,[pc,#|__fptest_l2|-.-8]
  661.         STR     a1,[pc,#|__fptest_l1|-.-8]
  662.         MOVS    pc,lr
  663.  
  664.         EXPORT  |__fpflag|
  665. |__fpflag|
  666.         DCD     0
  667.  
  668.         END
  669.