123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /* MIPS2 __mpn_sub_n -- Subtract two limb vectors of the same length > 0 and
- store difference in a third limb vector.
- Copyright (C) 1995-2019 Free Software Foundation, Inc.
- This file is part of the GNU MP Library.
- The GNU MP Library is free software; you can redistribute it and/or modify
- it under the terms of the GNU Lesser General Public License as published by
- the Free Software Foundation; either version 2.1 of the License, or (at your
- option) any later version.
- The GNU MP Library is distributed in the hope that it will be useful, but
- WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
- License for more details.
- You should have received a copy of the GNU Lesser General Public License
- along with the GNU MP Library. If not, see
- <http://www.gnu.org/licenses/>. */
- #include <sysdep.h>
- /* INPUT PARAMETERS
- res_ptr $4
- s1_ptr $5
- s2_ptr $6
- size $7
- */
- #ifdef __PIC__
- .option pic2
- #endif
- ENTRY (__mpn_sub_n)
- .set noreorder
- #ifdef __PIC__
- .cpload t9
- #endif
- .set nomacro
- lw $10,0($5)
- lw $11,0($6)
- addiu $7,$7,-1
- and $9,$7,4-1 /* number of limbs in first loop */
- beq $9,$0,L(L0) /* if multiple of 4 limbs, skip first loop */
- move $2,$0
- subu $7,$7,$9
- L(Loop0): addiu $9,$9,-1
- lw $12,4($5)
- addu $11,$11,$2
- lw $13,4($6)
- sltu $8,$11,$2
- subu $11,$10,$11
- sltu $2,$10,$11
- sw $11,0($4)
- or $2,$2,$8
- addiu $5,$5,4
- addiu $6,$6,4
- move $10,$12
- move $11,$13
- bne $9,$0,L(Loop0)
- addiu $4,$4,4
- L(L0): beq $7,$0,L(Lend)
- nop
- L(Loop): addiu $7,$7,-4
- lw $12,4($5)
- addu $11,$11,$2
- lw $13,4($6)
- sltu $8,$11,$2
- subu $11,$10,$11
- sltu $2,$10,$11
- sw $11,0($4)
- or $2,$2,$8
- lw $10,8($5)
- addu $13,$13,$2
- lw $11,8($6)
- sltu $8,$13,$2
- subu $13,$12,$13
- sltu $2,$12,$13
- sw $13,4($4)
- or $2,$2,$8
- lw $12,12($5)
- addu $11,$11,$2
- lw $13,12($6)
- sltu $8,$11,$2
- subu $11,$10,$11
- sltu $2,$10,$11
- sw $11,8($4)
- or $2,$2,$8
- lw $10,16($5)
- addu $13,$13,$2
- lw $11,16($6)
- sltu $8,$13,$2
- subu $13,$12,$13
- sltu $2,$12,$13
- sw $13,12($4)
- or $2,$2,$8
- addiu $5,$5,16
- addiu $6,$6,16
- bne $7,$0,L(Loop)
- addiu $4,$4,16
- L(Lend): addu $11,$11,$2
- sltu $8,$11,$2
- subu $11,$10,$11
- sltu $2,$10,$11
- sw $11,0($4)
- j $31
- or $2,$2,$8
- END (__mpn_sub_n)
|