/*
* Copyright (c) 2000 Apple Computer, Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved.
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*/
/*
* @OSF_COPYRIGHT@
*/
#include <debug.h>
#include <ppc/asm.h>
#include <ppc/proc_reg.h>
#include <mach/ppc/vm_param.h>
#include <assym.s>
/* void
* db_phys_cmp(src_a, src_b, bytecount)
* vm_offset_t src_a * int bytecount
*
* This routine will compare bytecount bytes from physical address src_a and physical
* address src_b.
*/
#warning THIS IS BROKEN FOR 64-BIT
/* Switch off data translations */
lis r7,hi16(MASK(MSR_VEC))
ori r7,r7,lo16(MASK(MSR_FP))
mfmsr r6
andc r6,r6,r7 andc r7,r6,r7 isync /* Ensure data translations are off */
subi r3, r3, 4
subi r4, r4, 4
cmpwi r5, 3
ble- .L_db_phys_cmp_bytes
.L_db_phys_cmp_loop:
lwz r0, 4(r3)
lwz r7, 4(r4)
addi r3, r3, 4
addi r4, r4, 4
subi r5, r5, 4
cmpw r0, r7
bne .L_db_phys_cmp_false
cmpwi r5, 3
bgt+ .L_db_phys_cmp_loop
/* If no leftover bytes, we're done now */
cmpwi r5, 0
beq+ .L_db_phys_cmp_true
.L_db_phys_cmp_bytes:
addi r3, r3, 3
addi r4, r4, 3
.L_db_phys_cmp_byte_loop:
lbz r0, 1(r3)
lbz r7, 1(r4)
addi r3, r3, 1
addi r4, r4, 1
subi r5, r5, 1
cmpw r0, r7
bne .L_db_phys_cmp_false
cmpwi r5, 0
bne+ .L_db_phys_cmp_loop
.L_db_phys_cmp_true:
li r3, 1
b .L_db_phys_cmp_done
.L_db_phys_cmp_false:
li r3, 0
.L_db_phys_cmp_done:
mtmsr r6 /* Restore original translations */
isync /* Ensure data translations are off */
blr