DataMuseum.dk

Presents historical artifacts from the history of:

Rational R1000/400 Tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about Rational R1000/400 Tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ L T

⟦1a46f8edd⟧ TextFile

    Length: 58297 (0xe3b9)
    Types: TextFile
    Names: »LEXICAL_COMPARE_LIST«

Derivation

└─⟦afbc8121e⟧ Bits:30000532 8mm tape, Rational 1000, MC68020_OS2000 7_2_2
    └─ ⟦77aa8350c⟧ »DATA« 
        └─⟦f794ecd1d⟧ 
            └─⟦24d1ddd49⟧ 
                └─⟦this⟧ 

TextFile

                                                ;    The use of this system is subject to the software license terms and
                                                ;    conditions agreed upon between Rational and the Customer.
                                                ;
                                                ;                Copyright 1988 by Rational.
                                                ;
                                                ;                          RESTRICTED RIGHTS LEGEND
                                                ;
                                                ;    Use, duplication, or disclosure by the Government is subject to
                                                ;    restrictions as set forth in subdivision (b)(3)(ii) of the Rights in
                                                ;    Technical Data and Computer Software clause at 52.227-7013.
                                                ;
                                                ;
                                                ;                Rational
                                                ;                3320 Scott Boulevard
                                                ;                Santa Clara, California 95054-3197
                                                ;
                                                ;   PROPRIETARY AND CONFIDENTIAL INFORMATION OF RATIONAL;
                                                ;   USE OR COPYING WITHOUT EXPRESS WRITTEN AUTHORIZATION
                                                ;   IS STRICTLY PROHIBITED.  THIS MATERIAL IS PROTECTED AS
                                                ;   AN UNPUBLISHED WORK UNDER THE U.S. COPYRIGHT ACT OF
                                                ;   1976.  CREATED 1988.  ALL RIGHTS RESERVED.
                                                ;
                                                ;
                                                
                                                        .module         "lexical_compare"
                                                        .include        "^^standard_assembler_include_file"
        00000000                                        .push_list
        00000000                                        .pop_list
        00000000                                        .list macro_expansion = none
                                                        .include        "^^common.runtime_definitions"
                                                ;
                                                ;   This number is used to check the compatibility
                                                ;   of the program and the loaded shared runtime.
                                                ;   The value must be incremented whenever an execution
                                                ;   incompatible change is made in the runtime.
                                                ;
                                                ;       Version         Incompatible changes in this version
                                                ;       -------         ------------------------------------
                                                ;           0           Initial release of shared runtime
                                                ;
                                                ;           1           Changed Os2000_Process_Defs to use
                                                ;                       special Ada work area rather than
                                                ;                       user accounting area.
                                                ;
                                                ;           2           Added 12 long words of spare storage
                                                ;                       in Runtime_Data; this will permit
                                                ;                       some addition of data in the shared
                                                ;                       runtime to be compatible. 
                                                ;
                                                ;           3           1.) Rev 6 compiler
                                                ;                       2.) Runtime entry point table now 16-bit
                                                ;                           offset from table to entry in words.
                                                ;                       3.) Deleted some unnecessary shared data items.
                                                ;                       4.) General cleanup
                                                        compatibility_version   equ 3
                                                ;
                                                ;   Amount of stack space reserved for the runtime in bytes
                                                ;
                                                        runtime$stack$cushion  equ 1024  
                                                ;
                                                ;   Values for certain runtime error messages and warnings.
                                                ;
                                                        error$code                      equ     16#8000#    
                                                        warning$code                    equ     16#8100#
                                                
                                                        elaboration$ferror              equ     1
                                                        finalization$ferror             equ     2
                                                        unhandled$main$trap$ferror      equ     3
                                                        lib$exception$ferror            equ     5
                                                        main$exception$ferror           equ     6
                                                        init$trap$handler$ferror        equ     37
                                                        insufficient$stack$ferror       equ     44
                                                        no$runtime$ferror               equ     45
                                                        rt$incompatible$ferror          equ     46
                                                
                                                        task$exception$warning          equ     1
                                                        heap$create$warning             equ     2       
                                                        stack$request$warning           equ     4
                                                
                                                ;
                                                ;   Values used in exit system call
                                                ;
                                                
                                                        No$Error                        equ     0
                                                        Some$Error                      equ     1
                                                ;
                                                ;   Comp Unit id for all runtime units except predefined exceptions 
                                                ;
                                                        runtime_compunit                equ     17      
                                                ;
                                                ;   Comp Unit id for predefined exception
                                                ;
                                                        exception_compunit              equ     1
                                                ;
                                                ;   Subprogram kind for runtime suprograms
                                                ;
                                                        sp_rt                           equ     1
                                                ;
                                                ;   Special statement numbers
                                                ;
                                                        stmt.end_prolog                 equ     1
                                                        stmt.begin_epilog               equ     16#7FFF#
                                                ;
                                                ;   Subprogram ids for debug directives within runtime
                                                ;   entry points.
                                                ;
                                                        sp.internal                             equ     16#0_00#
                                                
                                                        sp.enum_image                           equ     16#1_00#
                                                        sp.enum_pos                             equ     16#1_01#
                                                        sp.enum_pred                            equ     16#1_02#
                                                        sp.enum_succ                            equ     16#1_03#
                                                        sp.enum_value                           equ     16#1_04#
                                                        sp.enum_width                           equ     16#1_05#
                                                        sp.int_image                            equ     16#1_06#
                                                        sp.int_value                            equ     16#1_07#
                                                        sp.int_width                            equ     16#1_08#
                                                
                                                        sp.allocate_collection                  equ     16#2_00#
                                                        sp.allocate_fixed_cell                  equ     16#2_01#
                                                        sp.deallocate_collection                equ     16#2_02#
                                                        sp.deallocate_fixed_cell                equ     16#2_03#
                                                        sp.collection_size                      equ     16#2_04#
                                                   
                                                        sp.initialize_master                    equ     16#3_00#
                                                        sp.create_task                          equ     16#3_01#
                                                        sp.activate_offspring                   equ     16#3_02#
                                                        sp.notify_parent                        equ     16#3_03#
                                                        sp.task_end                             equ     16#3_04#
                                                        sp.await_dependents                     equ     16#3_05#
                                                        sp.task_completion                      equ     16#3_06#
                                                        sp.terminate_allocated_offspring        equ     16#3_07#
                                                        sp.terminate_dependent_offspring        equ     16#3_08#
                                                        sp.entry_call                           equ     16#3_09#
                                                        sp.conditional_entry_call               equ     16#3_0A#
                                                        sp.timed_entry_call                     equ     16#3_0B#
                                                        sp.begin_accept                         equ     16#3_0C#
                                                        sp.end_accept                           equ     16#3_0D#
                                                        sp.quick_accept                         equ     16#3_0E#
                                                        sp.close_alternatives                   equ     16#3_0F#
                                                        sp.open_delay                           equ     16#3_10#
                                                        sp.open_entry                           equ     16#3_11#
                                                        sp.open_terminate                       equ     16#3_12#
                                                        sp.select_rendezvous                    equ     16#3_13#
                                                        sp.abort_multiple_tasks                 equ     16#3_14#
                                                        sp.check_return_task                    equ     16#3_15#
                                                        sp.delay_statement                      equ     16#3_16#
                                                        sp.entry_count                          equ     16#3_17#
                                                        sp.task_callable                        equ     16#3_18#
                                                        sp.task_stack_size                      equ     16#3_19#
                                                        sp.task_terminated                      equ     16#3_1A#
                                                
                                                        sp.raise_exception                      equ     16#4_00#
                                                        sp.raise_constraint_error               equ     16#4_01#
                                                        sp.propagate_exception                  equ     16#4_02#
                                                        sp.stack_check                          equ     16#4_03#
                                                
                                                        sp.mantissa                             equ     16#5_00#
                                                        sp.large                                equ     16#5_01#
                                                        sp.fixed_multiply                       equ     16#5_02#
                                                        sp.compare_8_bit_unsigned               equ     16#5_03#
                                                        sp.compare_8_bit_signed                 equ     16#5_04#
                                                        sp.compare_16_bit_unsigned              equ     16#5_05#
                                                        sp.compare_16_bit_signed                equ     16#5_06#
                                                        sp.compare_32_bit_unsigned              equ     16#5_07#
                                                        sp.compare_32_bit_signed                equ     16#5_08#
                                                ;
                                                ;   Linkage mechanisms used in assembly routines.
                                                ;
                                                ;       Identification of the mechanism in a .subprogram directive
                                                ;       and information provided in .statement directives enable
                                                ;       the debugger to find the return pc.
                                                ;
                                                        linkage.frame   equ 16#00_00_00_00#     ; return pc may be found at
                                                                                                ; offset from frame pointer
                                                
                                                        linkage.simple  equ 16#10_00_00_00#     ; return pc may be found at
                                                                                                ; offset from stack pointer
                                                
                                                        linkage.none    equ 16#50_00_00_00#     ; no return pc exists,
                                                                                                ; in bottom routine
                                                
                                                        linkage.trap    equ 16#60_00_00_00#     ; in trap handling code
                                                ;
                                                ;       Definitions for locking primitives
                                                ;
                                                
                                                                .offset 0       ;  type Q_Element is
                                                                                ;      record
        00000008                                element'size:                   ;      end record;
                                                ;
                                                ;       Ada task control block (TCB) definitions
                                                ;
                                                                                .offset 0
                                                
                                                                                
                                                
        00000050                                tcb'size:
                                                
                                                b.action_state.exception_pending        equ     3
                                                
                                                        comp_unit      runtime_compunit
                                                 
                                                        .sect           ada_runtime_code,code,relocatable,alignment:=2
                                                
                                                        .gbl.a  __compare_8_bit_signed
                                                        .gbl.a  __compare_8_bit_unsigned
                                                        .gbl.a  __compare_16_bit_signed
                                                        .gbl.a  __compare_16_bit_unsigned
                                                        .gbl.a  __compare_32_bit_signed
                                                        .gbl.a  __compare_32_bit_unsigned
                                                
                                                ;
                                                ;       function Compare_8_Bit_Signed (A          : Address;
                                                ;                                      B          : Address;
                                                ;                                      A_Length   : Integer;
                                                ;                                      B_Length   : Integer) return Integer;
                                                ;
                                                ;
                                                        subprogram sp_rt,sp.compare_8_bit_signed,2#00100000_00000000#
                                                 
        00000000                                __compare_8_bit_signed:
                                                        .local
                                                
                                                        $a'offset       equ 12
                                                        $b'offset       equ 16
                                                        $a_len'offset   equ 20
                                                        $b_len'offset   equ 24
                                                
        00000000   487A0000                             pea     ($epilog:16,pc)
        00000004   4E560000                             link.w  a6,#0                   ; establish frame
        00000008   2F02                                 move.l  d2,-(sp)
                                                
                                                        statement      stmt.end_prolog,0,0
                                                 
                                                
                                                ;
                                                ;       if a'length > b'length then
                                                ;           d0 := 1;
                                                ;           d1 := b'length        
                                                ;       elsif a'length < b'length then
                                                ;           d0 := -1;
                                                ;           d1 := a'length
                                                ;       else
                                                ;           d0 := 0;      
                                                ;           d1 := a'length
                                                ;       end if;
                                                ;
        0000000A   4280                                 clr.l   d0                      ; assume lengths are equal
        0000000C   222E0014                             move.l  ($a_len'offset,a6),d1   ; d1 := a'length
        00000010   242E0018                             move.l  ($b_len'offset,a6),d2   ; d2 := b'length
        00000014   206E000C                             movea.l ($a'offset,a6),a0       ; a0 := a'address
        00000018   226E0010                             movea.l ($b'offset,a6),a1       ; a1 := b'address
        0000001C   B282                                 cmp.l   d2,d1                   ; compare a'length to b'length
        0000001E   6700                                 beq.s   $do_comparison          ; lengths are equal
        00000020   6D00                                 blt.s   $a_is_short
        00000022                                $b_is_short:
        00000022   5480                                 addq.l  #2,d0                   ; remember that A'Length > B'Length
        00000024   2202                                 move.l  d2,d1                   ; use B'Length
        00000026                                $a_is_short:
        00000026   5380                                 subq.l  #1,d0                   ; remember that A'Length < B'Length
                                                ;
                                                ;       if a > b then
                                                ;           d0 := d0 + 2;
                                                ;       elsif a < b then
                                                ;           d0 := d0 - 2;
                                                ;       end if;
                                                ;
        00000028                                $do_comparison:
        00000028   5381                                 subq.l  #1,d1                   ; adjust for DBcc
        0000002A   6D00                                 blt.s   $epilog                 ; check for null strings
        0000002C   2401                                 move.l  d1,d2                   ; d2 := count
        0000002E   4842                                 swap.w  d2                      ; d2 := high bits of count
        00000030   B308                         $loop:  cmpm.b  (a0)+,(a1)+             ; compare two elements
        00000032   56C9FFFC                             dbne.w  d1,$loop                ; compare the two vectors
        00000036   56CAFFF8                             dbne.w  d2,$loop
                                                
        0000003A                                $check_comparison_result:
        0000003A   6700                                 beq.s   $epilog
        0000003C   6E00                                 bgt.s   $b_gt_a
        0000003E   5880                                 addq.l  #4,d0
        00000040   5580                         $b_gt_a:subq.l  #2,d0
                                                
                                                        statement      stmt.begin_epilog,0,0
                                                 
                                                
        00000042   242EFFFC                     $epilog:move.l  (-4,a6),d2              ; restore d2
        00000046   4E5E                                 unlk    a6                      ; pop frame
        00000048   588F                                 addq.l  #4,sp                   ; pop handler address
        0000004A   4E740010                             rtd     #16                     ; return with result in d0
                                                ;
                                                ;       function Compare_8_Bit_Unsigned (A          : Address;
                                                ;                                        B          : Address;
                                                ;                                        A_Length   : Integer;
                                                ;                                        B_Length   : Integer) return Integer;
                                                ;
                                                ;
                                                        subprogram sp_rt,sp.compare_8_bit_unsigned,2#00100000_00000000#
                                                 
        0000004E                                __compare_8_bit_unsigned:
                                                        .local
                                                
                                                        $a'offset       equ 12
                                                        $b'offset       equ 16
                                                        $a_len'offset   equ 20
                                                        $b_len'offset   equ 24
                                                
        0000004E   487A0000                             pea     ($epilog:16,pc)
        00000052   4E560000                             link.w  a6,#0                   ; establish frame
        00000056   2F02                                 move.l  d2,-(sp)
                                                
                                                        statement      stmt.end_prolog,0,0
                                                 
                                                
                                                ;
                                                ;       if a'length > b'length then
                                                ;           d0 := 1;
                                                ;           d1 := b'length        
                                                ;       elsif a'length < b'length then
                                                ;           d0 := -1;
                                                ;           d1 := a'length
                                                ;       else
                                                ;           d0 := 0;      
                                                ;           d1 := a'length
                                                ;       end if;
                                                ;
        00000058   4280                                 clr.l   d0                      ; assume lengths are equal
        0000005A   222E0014                             move.l  ($a_len'offset,a6),d1   ; d1 := a'length
        0000005E   242E0018                             move.l  ($b_len'offset,a6),d2   ; d2 := b'length
        00000062   206E000C                             movea.l ($a'offset,a6),a0       ; a0 := a'address
        00000066   226E0010                             movea.l ($b'offset,a6),a1       ; a1 := b'address
        0000006A   B282                                 cmp.l   d2,d1                   ; compare a'length to b'length
        0000006C   6700                                 beq.s   $do_comparison          ; lengths are equal
        0000006E   6D00                                 blt.s   $a_is_short
        00000070                                $b_is_short:
        00000070   5480                                 addq.l  #2,d0                   ; remember that A'Length > B'Length
        00000072   2202                                 move.l  d2,d1                   ; use B'Length
        00000074                                $a_is_short:
        00000074   5380                                 subq.l  #1,d0                   ; remember that A'Length < B'Length
                                                ;
                                                ;       if a > b then
                                                ;           d0 := d0 + 2;
                                                ;       elsif a < b then
                                                ;           d0 := d0 - 2;
                                                ;       end if;
                                                ;
        00000076                                $do_comparison:
        00000076   5381                                 subq.l  #1,d1                   ; adjust for DBcc
        00000078   6D00                                 blt.s   $epilog                 ; check for null strings
        0000007A   2401                                 move.l  d1,d2                   ; d2 := count
        0000007C   4842                                 swap.w  d2                      ; d2 := high bits of count
        0000007E   B308                         $loop:  cmpm.b  (a0)+,(a1)+             ; compare two elements
        00000080   56C9FFFC                             dbne.w  d1,$loop                ; compare the two vectors
        00000084   56CAFFF8                             dbne.w  d2,$loop
                                                
        00000088                                $check_comparison_result:
        00000088   6700                                 beq.s   $epilog
        0000008A   6200                                 bhi.s   $b_gt_a
        0000008C   5880                                 addq.l  #4,d0
        0000008E   5580                         $b_gt_a:subq.l  #2,d0
                                                
                                                        statement      stmt.begin_epilog,0,0
                                                 
                                                
        00000090   242EFFFC                     $epilog:move.l  (-4,a6),d2              ; restore d2
        00000094   4E5E                                 unlk    a6                      ; pop frame
        00000096   588F                                 addq.l  #4,sp                   ; pop handler address
        00000098   4E740010                             rtd     #16                     ; return with result in d0
                                                ;
                                                ;       function compare_16_Bit_Signed (A          : Address;
                                                ;                                       B          : Address;
                                                ;                                       A_Length   : Integer;
                                                ;                                       B_Length   : Integer) return Integer;
                                                ;
                                                ;
                                                        subprogram sp_rt,sp.compare_16_bit_signed,2#00100000_00000000#
                                                 
        0000009C                                __compare_16_bit_signed:
                                                        .local
                                                
                                                        $a'offset       equ 12
                                                        $b'offset       equ 16
                                                        $a_len'offset   equ 20
                                                        $b_len'offset   equ 24
                                                
        0000009C   487A0000                             pea     ($epilog:16,pc)
        000000A0   4E560000                             link.w  a6,#0                   ; establish frame
        000000A4   2F02                                 move.l  d2,-(sp)
                                                
                                                        statement      stmt.end_prolog,0,0
                                                 
                                                
                                                ;
                                                ;       if a'length > b'length then
                                                ;           d0 := 1;
                                                ;           d1 := b'length        
                                                ;       elsif a'length < b'length then
                                                ;           d0 := -1;
                                                ;           d1 := a'length
                                                ;       else
                                                ;           d0 := 0;      
                                                ;           d1 := a'length
                                                ;       end if;
                                                ;
        000000A6   4280                                 clr.l   d0                      ; assume lengths are equal
        000000A8   222E0014                             move.l  ($a_len'offset,a6),d1   ; d1 := a'length
        000000AC   242E0018                             move.l  ($b_len'offset,a6),d2   ; d2 := b'length
        000000B0   206E000C                             movea.l ($a'offset,a6),a0       ; a0 := a'address
        000000B4   226E0010                             movea.l ($b'offset,a6),a1       ; a1 := b'address
        000000B8   B282                                 cmp.l   d2,d1                   ; compare a'length to b'length
        000000BA   6700                                 beq.s   $do_comparison          ; lengths are equal
        000000BC   6D00                                 blt.s   $a_is_short
        000000BE                                $b_is_short:
        000000BE   5480                                 addq.l  #2,d0                   ; remember that A'Length > B'Length
        000000C0   2202                                 move.l  d2,d1                   ; use B'Length
        000000C2                                $a_is_short:
        000000C2   5380                                 subq.l  #1,d0                   ; remember that A'Length < B'Length
                                                ;
                                                ;       if a > b then
                                                ;           d0 := d0 + 2;
                                                ;       elsif a < b then
                                                ;           d0 := d0 - 2;
                                                ;       end if;
                                                ;
        000000C4                                $do_comparison:
        000000C4   E289                                 lsr.l   #1,d1                   ; convert storage units to word count
        000000C6   5381                                 subq.l  #1,d1                   ; adjust for DBcc
        000000C8   6D00                                 blt.s   $epilog                 ; check for null strings
        000000CA   2401                                 move.l  d1,d2                   ; d2 := count
        000000CC   4842                                 swap.w  d2                      ; d2 := high bits of count
        000000CE   B348                         $loop:  cmpm.w  (a0)+,(a1)+             ; compare two elements
        000000D0   56C9FFFC                             dbne.w  d1,$loop                ; compare the two vectors
        000000D4   56CAFFF8                             dbne.w  d2,$loop
                                                
        000000D8                                $check_comparison_result:
        000000D8   6700                                 beq.s   $epilog
        000000DA   6E00                                 bgt.s   $b_gt_a
        000000DC   5880                                 addq.l  #4,d0
        000000DE   5580                         $b_gt_a:subq.l  #2,d0
                                                
                                                        statement      stmt.begin_epilog,0,0
                                                 
                                                
        000000E0   242EFFFC                     $epilog:move.l  (-4,a6),d2              ; restore d2
        000000E4   4E5E                                 unlk    a6                      ; pop frame
        000000E6   588F                                 addq.l  #4,sp                   ; pop handler address
        000000E8   4E740010                             rtd     #16                     ; return with result in d0
                                                ;
                                                ;       function Compare_16_Bit_Unsigned (A          : Address;
                                                ;                                         B          : Address;
                                                ;                                         A_Length   : Integer;
                                                ;                                         B_Length   : Integer) return Integer;
                                                ;
                                                ;
                                                        subprogram sp_rt,sp.compare_16_bit_unsigned,2#00100000_00000000#
                                                 
        000000EC                                __compare_16_bit_unsigned:
                                                        .local
                                                
                                                        $a'offset       equ 12
                                                        $b'offset       equ 16
                                                        $a_len'offset   equ 20
                                                        $b_len'offset   equ 24
                                                
        000000EC   487A0000                             pea     ($epilog:16,pc)
        000000F0   4E560000                             link.w  a6,#0                   ; establish frame
        000000F4   2F02                                 move.l  d2,-(sp)
                                                
                                                        statement      stmt.end_prolog,0,0
                                                 
                                                
                                                ;
                                                ;       if a'length > b'length then
                                                ;           d0 := 1;
                                                ;           d1 := b'length        
                                                ;       elsif a'length < b'length then
                                                ;           d0 := -1;
                                                ;           d1 := a'length
                                                ;       else
                                                ;           d0 := 0;      
                                                ;           d1 := a'length
                                                ;       end if;
                                                ;
        000000F6   4280                                 clr.l   d0                      ; assume lengths are equal
        000000F8   222E0014                             move.l  ($a_len'offset,a6),d1   ; d1 := a'length
        000000FC   242E0018                             move.l  ($b_len'offset,a6),d2   ; d2 := b'length
        00000100   206E000C                             movea.l ($a'offset,a6),a0       ; a0 := a'address
        00000104   226E0010                             movea.l ($b'offset,a6),a1       ; a1 := b'address
        00000108   B282                                 cmp.l   d2,d1                   ; compare a'length to b'length
        0000010A   6700                                 beq.s   $do_comparison          ; lengths are equal
        0000010C   6D00                                 blt.s   $a_is_short
        0000010E                                $b_is_short:
        0000010E   5480                                 addq.l  #2,d0                   ; remember that A'Length > B'Length
        00000110   2202                                 move.l  d2,d1                   ; use B'Length
        00000112                                $a_is_short:
        00000112   5380                                 subq.l  #1,d0                   ; remember that A'Length < B'Length
                                                ;
                                                ;       if a > b then
                                                ;           d0 := d0 + 2;
                                                ;       elsif a < b then
                                                ;           d0 := d0 - 2;
                                                ;       end if;
                                                ;
        00000114                                $do_comparison:
        00000114   E289                                 lsr.l   #1,d1                   ; convert storage units to word count
        00000116   5381                                 subq.l  #1,d1                   ; adjust for DBcc
        00000118   6D00                                 blt.s   $epilog                 ; check for null strings
        0000011A   2401                                 move.l  d1,d2                   ; d2 := count
        0000011C   4842                                 swap.w  d2                      ; d2 := high bits of count
        0000011E   B348                         $loop:  cmpm.w  (a0)+,(a1)+             ; compare two elements
        00000120   56C9FFFC                             dbne.w  d1,$loop                ; compare the two vectors
        00000124   56CAFFF8                             dbne.w  d2,$loop
                                                
        00000128                                $check_comparison_result:
        00000128   6700                                 beq.s   $epilog
        0000012A   6200                                 bhi.s   $b_gt_a
        0000012C   5880                                 addq.l  #4,d0
        0000012E   5580                         $b_gt_a:subq.l  #2,d0
                                                
                                                        statement      stmt.begin_epilog,0,0
                                                 
                                                
        00000130   242EFFFC                     $epilog:move.l  (-4,a6),d2              ; restore d2
        00000134   4E5E                                 unlk    a6                      ; pop frame
        00000136   588F                                 addq.l  #4,sp                   ; pop handler address
        00000138   4E740010                             rtd     #16                     ; return with result in d0
                                                ;
                                                ;       function Compare_32_Bit_Signed (A          : Address;
                                                ;                                       B          : Address;
                                                ;                                       A_Length   : Integer;
                                                ;                                       B_Length   : Integer) return Integer;
                                                ;
                                                ;
                                                        subprogram sp_rt,sp.compare_32_bit_signed,2#00100000_00000000#
                                                 
        0000013C                                __compare_32_bit_signed:
                                                        .local
                                                
                                                        $a'offset       equ 12
                                                        $b'offset       equ 16
                                                        $a_len'offset   equ 20
                                                        $b_len'offset   equ 24
                                                
        0000013C   487A0000                             pea     ($epilog:16,pc)
        00000140   4E560000                             link.w  a6,#0                   ; establish frame
        00000144   2F02                                 move.l  d2,-(sp)
                                                
                                                        statement      stmt.end_prolog,0,0
                                                 
                                                
                                                ;
                                                ;       if a'length > b'length then
                                                ;           d0 := 1;
                                                ;           d1 := b'length        
                                                ;       elsif a'length < b'length then
                                                ;           d0 := -1;
                                                ;           d1 := a'length
                                                ;       else
                                                ;           d0 := 0;      
                                                ;           d1 := a'length
                                                ;       end if;
                                                ;
        00000146   4280                                 clr.l   d0                      ; assume lengths are equal
        00000148   222E0014                             move.l  ($a_len'offset,a6),d1   ; d1 := a'length
        0000014C   242E0018                             move.l  ($b_len'offset,a6),d2   ; d2 := b'length
        00000150   206E000C                             movea.l ($a'offset,a6),a0       ; a0 := a'address
        00000154   226E0010                             movea.l ($b'offset,a6),a1       ; a1 := b'address
        00000158   B282                                 cmp.l   d2,d1                   ; compare a'length to b'length
        0000015A   6700                                 beq.s   $do_comparison          ; lengths are equal
        0000015C   6D00                                 blt.s   $a_is_short
        0000015E                                $b_is_short:
        0000015E   5480                                 addq.l  #2,d0                   ; remember that A'Length > B'Length
        00000160   2202                                 move.l  d2,d1                   ; use B'Length
        00000162                                $a_is_short:
        00000162   5380                                 subq.l  #1,d0                   ; remember that A'Length < B'Length
                                                ;
                                                ;       if a > b then
                                                ;           d0 := d0 + 2;
                                                ;       elsif a < b then
                                                ;           d0 := d0 - 2;
                                                ;       end if;
                                                ;
        00000164                                $do_comparison:
        00000164   E489                                 lsr.l   #2,d1                   ; convert storage units to long count
        00000166   5381                                 subq.l  #1,d1                   ; adjust for DBcc
        00000168   6D00                                 blt.s   $epilog                 ; check for null strings
        0000016A   2401                                 move.l  d1,d2                   ; d2 := count
        0000016C   4842                                 swap.w  d2                      ; d2 := high bits of count
        0000016E   B388                         $loop:  cmpm.l  (a0)+,(a1)+             ; compare two elements
        00000170   56C9FFFC                             dbne.w  d1,$loop                ; compare the two vectors
        00000174   56CAFFF8                             dbne.w  d2,$loop
                                                
        00000178                                $check_comparison_result:
        00000178   6700                                 beq.s   $epilog
        0000017A   6E00                                 bgt.s   $b_gt_a
        0000017C   5880                                 addq.l  #4,d0
        0000017E   5580                         $b_gt_a:subq.l  #2,d0
                                                
                                                        statement      stmt.begin_epilog,0,0
                                                 
                                                
        00000180   242EFFFC                     $epilog:move.l  (-4,a6),d2              ; restore d2
        00000184   4E5E                                 unlk    a6                      ; pop frame
        00000186   588F                                 addq.l  #4,sp                   ; pop handler address
        00000188   4E740010                             rtd     #16                     ; return with result in d0
                                                ;
                                                ;       function Compare_32_Bit_Unsigned (A          : Address;
                                                ;                                         B          : Address;
                                                ;                                         A_Length   : Integer;
                                                ;                                         B_Length   : Integer) return Integer;
                                                ;
                                                ;
                                                        subprogram sp_rt,sp.compare_32_bit_unsigned,2#00100000_00000000#
                                                 
        0000018C                                __compare_32_bit_unsigned:
                                                        .local
                                                
                                                        $a'offset       equ 12
                                                        $b'offset       equ 16
                                                        $a_len'offset   equ 20
                                                        $b_len'offset   equ 24
                                                
        0000018C   487A0000                             pea     ($epilog:16,pc)
        00000190   4E560000                             link.w  a6,#0                   ; establish frame
        00000194   2F02                                 move.l  d2,-(sp)
                                                
                                                        statement      stmt.end_prolog,0,0
                                                 
                                                
                                                ;
                                                ;       if a'length > b'length then
                                                ;           d0 := 1;
                                                ;           d1 := b'length        
                                                ;       elsif a'length < b'length then
                                                ;           d0 := -1;
                                                ;           d1 := a'length
                                                ;       else
                                                ;           d0 := 0;      
                                                ;           d1 := a'length
                                                ;       end if;
                                                ;
        00000196   4280                                 clr.l   d0                      ; assume lengths are equal
        00000198   222E0014                             move.l  ($a_len'offset,a6),d1   ; d1 := a'length
        0000019C   242E0018                             move.l  ($b_len'offset,a6),d2   ; d2 := b'length
        000001A0   206E000C                             movea.l ($a'offset,a6),a0       ; a0 := a'address
        000001A4   226E0010                             movea.l ($b'offset,a6),a1       ; a1 := b'address
        000001A8   B282                                 cmp.l   d2,d1                   ; compare a'length to b'length
        000001AA   6700                                 beq.s   $do_comparison          ; lengths are equal
        000001AC   6D00                                 blt.s   $a_is_short
        000001AE                                $b_is_short:
        000001AE   5480                                 addq.l  #2,d0                   ; remember that A'Length > B'Length
        000001B0   2202                                 move.l  d2,d1                   ; use B'Length
        000001B2                                $a_is_short:
        000001B2   5380                                 subq.l  #1,d0                   ; remember that A'Length < B'Length
                                                ;
                                                ;       if a > b then
                                                ;           d0 := d0 + 2;
                                                ;       elsif a < b then
                                                ;           d0 := d0 - 2;
                                                ;       end if;
                                                ;
        000001B4                                $do_comparison:
        000001B4   E489                                 lsr.l   #2,d1                   ; convert storage units to long count
        000001B6   5381                                 subq.l  #1,d1                   ; adjust for DBcc
        000001B8   6D00                                 blt.s   $epilog                 ; check for null strings
        000001BA   2401                                 move.l  d1,d2                   ; d2 := count
        000001BC   4842                                 swap.w  d2                      ; d2 := high bits of count
        000001BE   B388                         $loop:  cmpm.l  (a0)+,(a1)+             ; compare two elements
        000001C0   56C9FFFC                             dbne.w  d1,$loop                ; compare the two vectors
        000001C4   56CAFFF8                             dbne.w  d2,$loop
                                                
        000001C8                                $check_comparison_result:
        000001C8   6700                                 beq.s   $epilog
        000001CA   6200                                 bhi.s   $b_gt_a
        000001CC   5880                                 addq.l  #4,d0
        000001CE   5580                         $b_gt_a:subq.l  #2,d0
                                                
                                                        statement      stmt.begin_epilog,0,0
                                                 
                                                
        000001D0   242EFFFC                     $epilog:move.l  (-4,a6),d2              ; restore d2
        000001D4   4E5E                                 unlk    a6                      ; pop frame
        000001D6   588F                                 addq.l  #4,sp                   ; pop handler address
        000001D8   4E740010                             rtd     #16                     ; return with result in d0
                                                
                                                        end_subprograms
                                                 
                                                        
                                                        .end


      Program Section Name       Kind   Length   Patches Fixups
-------------------------------- ---- ---------- ------- -------
ADA_RUNTIME_CODE                  Rel        476      36       6
DEBUG_BODY                        Rel        210      24       6
DEBUG_HDR_CU                      Rel         31       2       0


Standard include file: <none>
Object module version: 11

        Assembled 3296 lines in 27.103 elapsed, 20.985 CPU.
         7297 lines per elapsed minute.
         9424 lines per CPU minute.
         30 disk waits for this job.
         908538 bytes of heap used by this job.