Annotation of XNU/osfmk/ppc/db_asm.s, revision 1.1.1.1

1.1       root        1: /*
                      2:  * Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
                      3:  *
                      4:  * @APPLE_LICENSE_HEADER_START@
                      5:  * 
                      6:  * The contents of this file constitute Original Code as defined in and
                      7:  * are subject to the Apple Public Source License Version 1.1 (the
                      8:  * "License").  You may not use this file except in compliance with the
                      9:  * License.  Please obtain a copy of the License at
                     10:  * http://www.apple.com/publicsource and read it before using this file.
                     11:  * 
                     12:  * This Original Code and all software distributed under the License are
                     13:  * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
                     14:  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
                     15:  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
                     16:  * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
                     17:  * License for the specific language governing rights and limitations
                     18:  * under the License.
                     19:  * 
                     20:  * @APPLE_LICENSE_HEADER_END@
                     21:  */
                     22: /*
                     23:  * @OSF_COPYRIGHT@
                     24:  */
                     25: 
                     26: #include <debug.h>
                     27: #include <ppc/asm.h>
                     28: #include <ppc/proc_reg.h>
                     29: #include <mach/ppc/vm_param.h>
                     30: #include <assym.s>
                     31: 
                     32: /* void
                     33:  * db_phys_copy(src, dst, bytecount)
                     34:  *      vm_offset_t     src;
                     35:  *      vm_offset_t     dst;
                     36:  *      int             bytecount
                     37:  *
                     38:  * This routine will copy bytecount bytes from physical address src to physical
                     39:  * address dst. 
                     40:  */
                     41: ENTRY(db_phys_copy, TAG_NO_FRAME_USED)
                     42: 
                     43:        /* Switch off data translations */
                     44:        mfmsr   r6
                     45:        rlwinm  r7,     r6,     0,      MSR_DR_BIT+1,   MSR_DR_BIT-1
                     46:        mtmsr   r7
                     47:        isync                   /* Ensure data translations are off */
                     48: 
                     49:        subi    r3,     r3,     4
                     50:        subi    r4,     r4,     4
                     51: 
                     52:        cmpwi   r5,     3
                     53:        ble-    .L_db_phys_copy_bytes
                     54: .L_db_phys_copy_loop:
                     55:        lwz     r0,     4(r3)
                     56:        addi    r3,     r3,     4
                     57:        subi    r5,     r5,     4
                     58:        stw     r0,     4(r4)
                     59:        addi    r4,     r4,     4
                     60:        cmpwi   r5,     3
                     61:        bgt+    .L_db_phys_copy_loop
                     62: 
                     63:        /* If no leftover bytes, we're done now */
                     64:        cmpwi   r5,     0
                     65:        beq+    .L_db_phys_copy_done
                     66:        
                     67: .L_db_phys_copy_bytes:
                     68:        addi    r3,     r3,     3
                     69:        addi    r4,     r4,     3
                     70: .L_db_phys_copy_byte_loop:     
                     71:        lbz     r0,     1(r3)
                     72:        addi    r3,     r3,     1
                     73:        subi    r5,     r5,     1
                     74:        stb     r0,     1(r4)
                     75:        addi    r4,     r4,     1
                     76:        cmpwi   r5,     0
                     77:        bne+    .L_db_phys_copy_loop
                     78: 
                     79: .L_db_phys_copy_done:
                     80:        mtmsr   r6              /* Restore original translations */
                     81:        isync                   /* Ensure data translations are off */
                     82: 
                     83:        blr
                     84: 
                     85: /* void
                     86:  * db_phys_cmp(src_a, src_b, bytecount)
                     87:  *      vm_offset_t     src_a;
                     88:  *      vm_offset_t     src_b;
                     89:  *      int             bytecount
                     90:  *
                     91:  * This routine will compare bytecount bytes from physical address src_a and physical
                     92:  * address src_b. 
                     93:  */
                     94: 
                     95:        /* Switch off data translations */
                     96:        mfmsr   r6
                     97:        rlwinm  r7,     r6,     0,      MSR_DR_BIT+1,   MSR_DR_BIT-1
                     98:        mtmsr   r7
                     99:        isync                   /* Ensure data translations are off */
                    100: 
                    101:        subi    r3,     r3,     4
                    102:        subi    r4,     r4,     4
                    103: 
                    104:        cmpwi   r5,     3
                    105:        ble-    .L_db_phys_cmp_bytes
                    106: .L_db_phys_cmp_loop:
                    107:        lwz     r0,     4(r3)
                    108:        lwz     r7,     4(r4)
                    109:        addi    r3,     r3,     4
                    110:        addi    r4,     r4,     4
                    111:        subi    r5,     r5,     4
                    112:        cmpw    r0,     r7
                    113:        bne     .L_db_phys_cmp_false
                    114:        cmpwi   r5,     3
                    115:        bgt+    .L_db_phys_cmp_loop
                    116: 
                    117:        /* If no leftover bytes, we're done now */
                    118:        cmpwi   r5,     0
                    119:        beq+    .L_db_phys_cmp_true
                    120:        
                    121: .L_db_phys_cmp_bytes:
                    122:        addi    r3,     r3,     3
                    123:        addi    r4,     r4,     3
                    124: .L_db_phys_cmp_byte_loop:      
                    125:        lbz     r0,     1(r3)
                    126:        lbz     r7,     1(r4)
                    127:        addi    r3,     r3,     1
                    128:        addi    r4,     r4,     1
                    129:        subi    r5,     r5,     1
                    130:        cmpw    r0,     r7
                    131:        bne     .L_db_phys_cmp_false
                    132:        cmpwi   r5,     0
                    133:        bne+    .L_db_phys_cmp_loop
                    134: 
                    135: .L_db_phys_cmp_true:
                    136:        li      r3,     1
                    137:        b       .L_db_phys_cmp_done
                    138: 
                    139: .L_db_phys_cmp_false:
                    140:        li      r3,     0
                    141: 
                    142: .L_db_phys_cmp_done:
                    143:        mtmsr   r6              /* Restore original translations */
                    144:        isync                   /* Ensure data translations are off */
                    145: 
                    146:        blr
                    147: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.