Add Chromium-only Blender WebEngine parity work
This commit is contained in:
138
blender-5.2.0/extern/gmp-source/mpn/m68k/README
vendored
Normal file
138
blender-5.2.0/extern/gmp-source/mpn/m68k/README
vendored
Normal file
@@ -0,0 +1,138 @@
|
||||
Copyright 2001, 2003, 2004 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 either:
|
||||
|
||||
* the GNU Lesser General Public License as published by the Free
|
||||
Software Foundation; either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
or
|
||||
|
||||
* the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any
|
||||
later version.
|
||||
|
||||
or both in parallel, as here.
|
||||
|
||||
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 General Public License
|
||||
for more details.
|
||||
|
||||
You should have received copies of the GNU General Public License and the
|
||||
GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
see https://www.gnu.org/licenses/.
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
M68K MPN SUBROUTINES
|
||||
|
||||
|
||||
This directory contains mpn functions for various m68k family chips.
|
||||
|
||||
|
||||
CODE ORGANIZATION
|
||||
|
||||
m68k m68000, m68010, m68060
|
||||
m68k/mc68020 m68020, m68030, m68040, and CPU32
|
||||
|
||||
|
||||
The m5200 "coldfire", which is m68000 less a few instructions, currently has
|
||||
no assembler code support.
|
||||
|
||||
|
||||
STATUS
|
||||
|
||||
The code herein is old and poorly maintained. If somebody really cared, it
|
||||
could be optimized substantially. For example,
|
||||
|
||||
* mpn_add_n and mpn_sub_n could, with more unrolling be improved from 6 to
|
||||
close to 4 c/l (on m68040).
|
||||
|
||||
* The multiplication loops could be sped up by using the FPU.
|
||||
|
||||
* mpn_lshift by 31 should use the special-case mpn_rshift by 1 code, and
|
||||
vice versa mpn_rshift by 31 use the special lshift by 1, when operand
|
||||
overlap permits.
|
||||
|
||||
* On 68000, mpn_mul_1, mpn_addmul_1 and mpn_submul_1 could check for a
|
||||
16-bit multiplier and use two multiplies per limb, not four.
|
||||
|
||||
Similarly various other _1 operations like mpn_mod_1, mpn_divrem_1,
|
||||
mpn_divexact_1, mpn_modexact_1c_odd.
|
||||
|
||||
* On 68000, mpn_lshift and mpn_rshift could use a roll and mask instead of
|
||||
lsrl and lsll. This promises to be a speedup, effectively trading a 6+2*n
|
||||
shift for one or two 4 cycle masks. Suggested by Jean-Charles Meyrignac.
|
||||
|
||||
* config.guess detects 68000, 68010, CPU32 and 68020 by running some code,
|
||||
but relies on system information for 030, 040 and 060. Can they be
|
||||
identified by running some code? Currently this only makes a difference
|
||||
to the compiler options selected, since we have no specific asm code for
|
||||
those chips.
|
||||
|
||||
One novel idea for 68000 would be to use a 16-bit limb instead of 32-bits.
|
||||
This would suit the native 16x16 multiply, but might make it difficult to
|
||||
get full value from the native 32x32 add/sub/etc. This would be an ABI
|
||||
option, and would select "__GMP_SHORT_LIMB" in gmp.h.
|
||||
|
||||
Naturally an entirely new set of asm subroutines would be needed for a
|
||||
16-bit limb. Also there's various places in the C code assuming limb>=long,
|
||||
which would need to be updated, eg. mpz_set_ui. Some of the nails changes
|
||||
may have helped cover some of this.
|
||||
|
||||
|
||||
ASM FILES
|
||||
|
||||
The .asm files are put through m4 for macro processing, and with the help of
|
||||
configure give either MIT or Motorola syntax. The generic mpn/asm-defs.m4
|
||||
is used, together with mpn/m68k/m68k-defs.m4. See comments in those files.
|
||||
|
||||
Not all possible syntax variations are covered. GCC config/m68k for
|
||||
instance has things like $ for immediates on CRDS or reversed cmp order for
|
||||
AT&T SGS. These could probably be handled if anyone really needs it.
|
||||
|
||||
|
||||
CALLING CONVENTIONS
|
||||
|
||||
The SVR4 standard has an int of 32 bits, and all parameters 32-bit aligned
|
||||
on the stack.
|
||||
|
||||
PalmOS and perhaps various embedded systems intended for 68000 however use
|
||||
an int of 16 bits and parameters only 16-bit aligned on the stack. This is
|
||||
generated by "gcc -mshort" (and is the default for the PalmOS gcc port, we
|
||||
believe).
|
||||
|
||||
The asm files adapt to these two ABIs by checking sizeof(unsigned), coming
|
||||
through config.m4 as SIZEOF_UNSIGNED. Only mpn_lshift and mpn_rshift are
|
||||
affected, all other routines take longs and pointers, which are 32-bits in
|
||||
both cases.
|
||||
|
||||
Strictly speaking the size of an int doesn't determine the stack padding
|
||||
convention. But if int is 16 bits then we can definitely say the host
|
||||
system is not SVR4, and therefore may as well assume we're in 16-bit stack
|
||||
alignment.
|
||||
|
||||
|
||||
REFERENCES
|
||||
|
||||
"Motorola M68000 Family Programmer's Reference Manual", available online,
|
||||
|
||||
http://e-www.motorola.com/brdata/PDFDB/docs/M68000PM.pdf
|
||||
|
||||
"System V Application Binary Interface: Motorola 68000 Processor Family
|
||||
Supplement", AT&T, 1990, ISBN 0-13-877553-6. Has details of calling
|
||||
conventions and ELF style PIC coding.
|
||||
|
||||
|
||||
|
||||
----------------
|
||||
Local variables:
|
||||
mode: text
|
||||
fill-column: 76
|
||||
End:
|
||||
99
blender-5.2.0/extern/gmp-source/mpn/m68k/aors_n.asm
vendored
Normal file
99
blender-5.2.0/extern/gmp-source/mpn/m68k/aors_n.asm
vendored
Normal file
@@ -0,0 +1,99 @@
|
||||
dnl mc68020 mpn_add_n, mpn_sub_n -- add or subtract limb vectors
|
||||
|
||||
dnl Copyright 1992, 1994, 1996, 1999-2003, 2005 Free Software Foundation, Inc.
|
||||
|
||||
dnl This file is part of the GNU MP Library.
|
||||
dnl
|
||||
dnl The GNU MP Library is free software; you can redistribute it and/or modify
|
||||
dnl it under the terms of either:
|
||||
dnl
|
||||
dnl * the GNU Lesser General Public License as published by the Free
|
||||
dnl Software Foundation; either version 3 of the License, or (at your
|
||||
dnl option) any later version.
|
||||
dnl
|
||||
dnl or
|
||||
dnl
|
||||
dnl * the GNU General Public License as published by the Free Software
|
||||
dnl Foundation; either version 2 of the License, or (at your option) any
|
||||
dnl later version.
|
||||
dnl
|
||||
dnl or both in parallel, as here.
|
||||
dnl
|
||||
dnl The GNU MP Library is distributed in the hope that it will be useful, but
|
||||
dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
dnl for more details.
|
||||
dnl
|
||||
dnl You should have received copies of the GNU General Public License and the
|
||||
dnl GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
dnl see https://www.gnu.org/licenses/.
|
||||
|
||||
include(`../config.m4')
|
||||
|
||||
C cycles/limb
|
||||
C 68040: 6
|
||||
|
||||
ifdef(`OPERATION_add_n',`
|
||||
define(M4_inst, addxl)
|
||||
define(M4_function_n, mpn_add_n)
|
||||
',`ifdef(`OPERATION_sub_n',`
|
||||
define(M4_inst, subxl)
|
||||
define(M4_function_n, mpn_sub_n)
|
||||
',
|
||||
`m4_error(`Need OPERATION_add_n or OPERATION_sub_n
|
||||
')')')
|
||||
|
||||
MULFUNC_PROLOGUE(mpn_add_n mpn_sub_n)
|
||||
|
||||
|
||||
C INPUT PARAMETERS
|
||||
C res_ptr (sp + 4)
|
||||
C s1_ptr (sp + 8)
|
||||
C s2_ptr (sp + 12)
|
||||
C size (sp + 16)
|
||||
|
||||
|
||||
PROLOGUE(M4_function_n)
|
||||
|
||||
C Save used registers on the stack.
|
||||
movel d2, M(-,sp)
|
||||
movel a2, M(-,sp)
|
||||
|
||||
C Copy the arguments to registers. Better use movem?
|
||||
movel M(sp,12), a2
|
||||
movel M(sp,16), a0
|
||||
movel M(sp,20), a1
|
||||
movel M(sp,24), d2
|
||||
|
||||
eorw #1, d2
|
||||
lsrl #1, d2
|
||||
bcc L(L1)
|
||||
subql #1, d2 C clears cy as side effect
|
||||
|
||||
L(Loop):
|
||||
movel M(a0,+), d0
|
||||
movel M(a1,+), d1
|
||||
M4_inst d1, d0
|
||||
movel d0, M(a2,+)
|
||||
L(L1): movel M(a0,+), d0
|
||||
movel M(a1,+), d1
|
||||
M4_inst d1, d0
|
||||
movel d0, M(a2,+)
|
||||
|
||||
dbf d2, L(Loop) C loop until 16 lsb of %4 == -1
|
||||
subxl d0, d0 C d0 <= -cy; save cy as 0 or -1 in d0
|
||||
subl #0x10000, d2
|
||||
bcs L(L2)
|
||||
addl d0, d0 C restore cy
|
||||
bra L(Loop)
|
||||
|
||||
L(L2):
|
||||
negl d0
|
||||
|
||||
C Restore used registers from stack frame.
|
||||
movel M(sp,+), a2
|
||||
movel M(sp,+), d2
|
||||
|
||||
rts
|
||||
|
||||
EPILOGUE(M4_function_n)
|
||||
76
blender-5.2.0/extern/gmp-source/mpn/m68k/gmp-mparam.h
vendored
Normal file
76
blender-5.2.0/extern/gmp-source/mpn/m68k/gmp-mparam.h
vendored
Normal file
@@ -0,0 +1,76 @@
|
||||
/* gmp-mparam.h -- Compiler/machine parameter header file.
|
||||
|
||||
Copyright 2000-2004 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 either:
|
||||
|
||||
* the GNU Lesser General Public License as published by the Free
|
||||
Software Foundation; either version 3 of the License, or (at your
|
||||
option) any later version.
|
||||
|
||||
or
|
||||
|
||||
* the GNU General Public License as published by the Free Software
|
||||
Foundation; either version 2 of the License, or (at your option) any
|
||||
later version.
|
||||
|
||||
or both in parallel, as here.
|
||||
|
||||
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 General Public License
|
||||
for more details.
|
||||
|
||||
You should have received copies of the GNU General Public License and the
|
||||
GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
see https://www.gnu.org/licenses/. */
|
||||
|
||||
|
||||
#define GMP_LIMB_BITS 32
|
||||
#define GMP_LIMB_BYTES 4
|
||||
|
||||
|
||||
/* 25MHz 68040 */
|
||||
|
||||
/* Generated by tuneup.c, 2004-02-05, gcc 3.2 */
|
||||
|
||||
#define MUL_TOOM22_THRESHOLD 14
|
||||
#define MUL_TOOM33_THRESHOLD 90
|
||||
|
||||
#define SQR_BASECASE_THRESHOLD 5
|
||||
#define SQR_TOOM2_THRESHOLD 28
|
||||
#define SQR_TOOM3_THRESHOLD 98
|
||||
|
||||
#define DIV_SB_PREINV_THRESHOLD MP_SIZE_T_MAX /* never */
|
||||
#define DIV_DC_THRESHOLD 55
|
||||
#define POWM_THRESHOLD 65
|
||||
|
||||
#define HGCD_THRESHOLD 116
|
||||
#define GCD_ACCEL_THRESHOLD 3
|
||||
#define GCD_DC_THRESHOLD 590
|
||||
#define JACOBI_BASE_METHOD 2
|
||||
|
||||
#define DIVREM_1_NORM_THRESHOLD MP_SIZE_T_MAX /* never */
|
||||
#define DIVREM_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */
|
||||
#define MOD_1_NORM_THRESHOLD MP_SIZE_T_MAX /* never */
|
||||
#define MOD_1_UNNORM_THRESHOLD MP_SIZE_T_MAX /* never */
|
||||
#define USE_PREINV_DIVREM_1 0
|
||||
#define USE_PREINV_MOD_1 0
|
||||
#define DIVREM_2_THRESHOLD MP_SIZE_T_MAX /* never */
|
||||
#define DIVEXACT_1_THRESHOLD MP_SIZE_T_MAX /* never */
|
||||
#define MODEXACT_1_ODD_THRESHOLD MP_SIZE_T_MAX /* never */
|
||||
|
||||
#define GET_STR_DC_THRESHOLD 18
|
||||
#define GET_STR_PRECOMPUTE_THRESHOLD 43
|
||||
#define SET_STR_THRESHOLD 937
|
||||
|
||||
#define MUL_FFT_TABLE { 336, 672, 1408, 3584, 10240, 24576, 0 }
|
||||
#define MUL_FFT_MODF_THRESHOLD 296
|
||||
#define MUL_FFT_THRESHOLD 1728
|
||||
|
||||
#define SQR_FFT_TABLE { 336, 736, 1408, 3584, 10240, 24576, 0 }
|
||||
#define SQR_FFT_MODF_THRESHOLD 296
|
||||
#define SQR_FFT_THRESHOLD 2304
|
||||
175
blender-5.2.0/extern/gmp-source/mpn/m68k/lshift.asm
vendored
Normal file
175
blender-5.2.0/extern/gmp-source/mpn/m68k/lshift.asm
vendored
Normal file
@@ -0,0 +1,175 @@
|
||||
dnl mc68020 mpn_lshift -- mpn left shift.
|
||||
|
||||
dnl Copyright 1996, 1999-2003 Free Software Foundation, Inc.
|
||||
|
||||
dnl This file is part of the GNU MP Library.
|
||||
dnl
|
||||
dnl The GNU MP Library is free software; you can redistribute it and/or modify
|
||||
dnl it under the terms of either:
|
||||
dnl
|
||||
dnl * the GNU Lesser General Public License as published by the Free
|
||||
dnl Software Foundation; either version 3 of the License, or (at your
|
||||
dnl option) any later version.
|
||||
dnl
|
||||
dnl or
|
||||
dnl
|
||||
dnl * the GNU General Public License as published by the Free Software
|
||||
dnl Foundation; either version 2 of the License, or (at your option) any
|
||||
dnl later version.
|
||||
dnl
|
||||
dnl or both in parallel, as here.
|
||||
dnl
|
||||
dnl The GNU MP Library is distributed in the hope that it will be useful, but
|
||||
dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
dnl for more details.
|
||||
dnl
|
||||
dnl You should have received copies of the GNU General Public License and the
|
||||
dnl GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
dnl see https://www.gnu.org/licenses/.
|
||||
|
||||
include(`../config.m4')
|
||||
|
||||
|
||||
C cycles/limb
|
||||
C shift==1 shift>1
|
||||
C 68040: 5 12
|
||||
|
||||
|
||||
C mp_limb_t mpn_lshift (mp_ptr res_ptr, mp_srcptr s_ptr, mp_size_t s_size,
|
||||
C unsigned cnt);
|
||||
C
|
||||
C The "cnt" parameter is either 16 bits or 32 bits depending on
|
||||
C SIZEOF_UNSIGNED (see ABI notes in mpn/m68k/README). The value is of
|
||||
C course only 1 to 31. When loaded as 16 bits there's garbage in the upper
|
||||
C half, hence the use of cmpw. The shift instructions take the their count
|
||||
C modulo 64, so the upper part doesn't matter to them either.
|
||||
C
|
||||
|
||||
C INPUT PARAMETERS
|
||||
C res_ptr (sp + 4)
|
||||
C s_ptr (sp + 8)
|
||||
C s_size (sp + 12)
|
||||
C cnt (sp + 16)
|
||||
|
||||
define(res_ptr, `a1')
|
||||
define(s_ptr, `a0')
|
||||
define(s_size, `d6')
|
||||
define(cnt, `d4')
|
||||
|
||||
ifdef(`SIZEOF_UNSIGNED',,
|
||||
`m4_error(`SIZEOF_UNSIGNED not defined, should be in config.m4
|
||||
')')
|
||||
|
||||
PROLOGUE(mpn_lshift)
|
||||
C Save used registers on the stack.
|
||||
moveml d2-d6/a2, M(-,sp)
|
||||
|
||||
C Copy the arguments to registers.
|
||||
movel M(sp,28), res_ptr
|
||||
movel M(sp,32), s_ptr
|
||||
movel M(sp,36), s_size
|
||||
ifelse(SIZEOF_UNSIGNED,2,
|
||||
` movew M(sp,40), cnt',
|
||||
` movel M(sp,40), cnt')
|
||||
|
||||
moveql #1, d5
|
||||
cmpw d5, cnt
|
||||
bne L(Lnormal)
|
||||
cmpl s_ptr, res_ptr
|
||||
bls L(Lspecial) C jump if s_ptr >= res_ptr
|
||||
|
||||
ifelse(scale_available_p,1,`
|
||||
lea M(s_ptr,s_size,l,4), a2
|
||||
',`
|
||||
movel s_size, d0
|
||||
asll #2, d0
|
||||
lea M(s_ptr,d0,l), a2
|
||||
')
|
||||
cmpl res_ptr, a2
|
||||
bls L(Lspecial) C jump if res_ptr >= s_ptr + s_size
|
||||
|
||||
L(Lnormal):
|
||||
moveql #32, d5
|
||||
subl cnt, d5
|
||||
|
||||
ifelse(scale_available_p,1,`
|
||||
lea M(s_ptr,s_size,l,4), s_ptr
|
||||
lea M(res_ptr,s_size,l,4), res_ptr
|
||||
',`
|
||||
movel s_size, d0
|
||||
asll #2, d0
|
||||
addl d0, s_ptr
|
||||
addl d0, res_ptr
|
||||
')
|
||||
movel M(-,s_ptr), d2
|
||||
movel d2, d0
|
||||
lsrl d5, d0 C compute carry limb
|
||||
|
||||
lsll cnt, d2
|
||||
movel d2, d1
|
||||
subql #1, s_size
|
||||
beq L(Lend)
|
||||
lsrl #1, s_size
|
||||
bcs L(L1)
|
||||
subql #1, s_size
|
||||
|
||||
L(Loop):
|
||||
movel M(-,s_ptr), d2
|
||||
movel d2, d3
|
||||
lsrl d5, d3
|
||||
orl d3, d1
|
||||
movel d1, M(-,res_ptr)
|
||||
lsll cnt, d2
|
||||
L(L1):
|
||||
movel M(-,s_ptr), d1
|
||||
movel d1, d3
|
||||
lsrl d5, d3
|
||||
orl d3, d2
|
||||
movel d2, M(-,res_ptr)
|
||||
lsll cnt, d1
|
||||
|
||||
dbf s_size, L(Loop)
|
||||
subl #0x10000, s_size
|
||||
bcc L(Loop)
|
||||
|
||||
L(Lend):
|
||||
movel d1, M(-,res_ptr) C store least significant limb
|
||||
|
||||
C Restore used registers from stack frame.
|
||||
moveml M(sp,+), d2-d6/a2
|
||||
rts
|
||||
|
||||
C We loop from least significant end of the arrays, which is only
|
||||
C permissable if the source and destination don't overlap, since the
|
||||
C function is documented to work for overlapping source and destination.
|
||||
|
||||
L(Lspecial):
|
||||
clrl d0 C initialize carry
|
||||
eorw #1, s_size
|
||||
lsrl #1, s_size
|
||||
bcc L(LL1)
|
||||
subql #1, s_size
|
||||
|
||||
L(LLoop):
|
||||
movel M(s_ptr,+), d2
|
||||
addxl d2, d2
|
||||
movel d2, M(res_ptr,+)
|
||||
L(LL1):
|
||||
movel M(s_ptr,+), d2
|
||||
addxl d2, d2
|
||||
movel d2, M(res_ptr,+)
|
||||
|
||||
dbf s_size, L(LLoop)
|
||||
addxl d0, d0 C save cy in lsb
|
||||
subl #0x10000, s_size
|
||||
bcs L(LLend)
|
||||
lsrl #1, d0 C restore cy
|
||||
bra L(LLoop)
|
||||
|
||||
L(LLend):
|
||||
C Restore used registers from stack frame.
|
||||
moveml M(sp,+), d2-d6/a2
|
||||
rts
|
||||
|
||||
EPILOGUE(mpn_lshift)
|
||||
230
blender-5.2.0/extern/gmp-source/mpn/m68k/m68k-defs.m4
vendored
Normal file
230
blender-5.2.0/extern/gmp-source/mpn/m68k/m68k-defs.m4
vendored
Normal file
@@ -0,0 +1,230 @@
|
||||
divert(-1)
|
||||
|
||||
dnl m4 macros for 68k assembler.
|
||||
|
||||
dnl Copyright 2001-2003 Free Software Foundation, Inc.
|
||||
|
||||
dnl This file is part of the GNU MP Library.
|
||||
dnl
|
||||
dnl The GNU MP Library is free software; you can redistribute it and/or modify
|
||||
dnl it under the terms of either:
|
||||
dnl
|
||||
dnl * the GNU Lesser General Public License as published by the Free
|
||||
dnl Software Foundation; either version 3 of the License, or (at your
|
||||
dnl option) any later version.
|
||||
dnl
|
||||
dnl or
|
||||
dnl
|
||||
dnl * the GNU General Public License as published by the Free Software
|
||||
dnl Foundation; either version 2 of the License, or (at your option) any
|
||||
dnl later version.
|
||||
dnl
|
||||
dnl or both in parallel, as here.
|
||||
dnl
|
||||
dnl The GNU MP Library is distributed in the hope that it will be useful, but
|
||||
dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
dnl for more details.
|
||||
dnl
|
||||
dnl You should have received copies of the GNU General Public License and the
|
||||
dnl GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
dnl see https://www.gnu.org/licenses/.
|
||||
|
||||
|
||||
dnl The default m4 `#' commenting interferes with the assembler syntax for
|
||||
dnl immediates. `|' would be correct, but it interferes with "||" in
|
||||
dnl eval(). Would like to disable commenting, but that's not possible (see
|
||||
dnl mpn/asm-defs.m4), so use `;' which should be harmless.
|
||||
|
||||
changecom(;)
|
||||
|
||||
|
||||
dnl Called: PROLOGUE_cpu(GSYM_PREFIX`'foo)
|
||||
dnl
|
||||
dnl Same as the standard PROLOGUE, but align to 2 bytes not 4.
|
||||
|
||||
define(`PROLOGUE_cpu',
|
||||
m4_assert_numargs(1)
|
||||
` TEXT
|
||||
ALIGN(2)
|
||||
GLOBL `$1' GLOBL_ATTR
|
||||
TYPE(`$1',`function')
|
||||
`$1'LABEL_SUFFIX')
|
||||
|
||||
|
||||
dnl Usage: d0, etc
|
||||
dnl
|
||||
dnl Expand to d0 or %d0 according to the assembler's requirements.
|
||||
dnl
|
||||
dnl Actually d0 expands to `d0' or %`d0', the quotes protecting against
|
||||
dnl further expansion. Definitions are made even if d0 is to be just `d0',
|
||||
dnl so that any m4 quoting problems will show up everywhere, not just on a
|
||||
dnl %d0 system.
|
||||
dnl
|
||||
dnl Care must be taken with quoting when using these in a definition. For
|
||||
dnl instance the quotes in the following are essential or two %'s will be
|
||||
dnl produced when `counter' is used.
|
||||
dnl
|
||||
dnl define(counter, `d7')
|
||||
dnl
|
||||
|
||||
dnl Called: m68k_reg(r)
|
||||
define(m68k_reg,
|
||||
m4_assert_numargs(1)
|
||||
m4_assert_defined(`WANT_REGISTER_PERCENT')
|
||||
`ifelse(WANT_REGISTER_PERCENT,yes,%)`$1'')
|
||||
|
||||
dnl Usage: m68k_defreg(r)
|
||||
define(m68k_defreg,
|
||||
m4_assert_numargs(1)
|
||||
`deflit($1,`m68k_reg(`$1')')')
|
||||
|
||||
m68k_defreg(d0)
|
||||
m68k_defreg(d1)
|
||||
m68k_defreg(d2)
|
||||
m68k_defreg(d3)
|
||||
m68k_defreg(d4)
|
||||
m68k_defreg(d5)
|
||||
m68k_defreg(d6)
|
||||
m68k_defreg(d7)
|
||||
|
||||
m68k_defreg(a0)
|
||||
m68k_defreg(a1)
|
||||
m68k_defreg(a2)
|
||||
m68k_defreg(a3)
|
||||
m68k_defreg(a4)
|
||||
m68k_defreg(a5)
|
||||
m68k_defreg(a6)
|
||||
m68k_defreg(a7)
|
||||
|
||||
m68k_defreg(sp)
|
||||
m68k_defreg(pc)
|
||||
|
||||
|
||||
dnl Usage: M(base)
|
||||
dnl M(base,displacement)
|
||||
dnl M(base,index,size)
|
||||
dnl M(base,index,size,scale)
|
||||
dnl M(base,+)
|
||||
dnl M(-,base)
|
||||
dnl
|
||||
dnl `base' is an address register, `index' is a data register, `size' is w
|
||||
dnl or l, and scale is 1, 2, 4 or 8.
|
||||
dnl
|
||||
dnl M(-,base) has it's arguments that way around to emphasise it's a
|
||||
dnl pre-decrement, as opposed to M(base,+) a post-increment.
|
||||
dnl
|
||||
dnl Enhancement: Add the memory indirect modes, if/when they're needed.
|
||||
|
||||
define(M,
|
||||
m4_assert_numargs_range(1,4)
|
||||
m4_assert_defined(`WANT_ADDRESSING')
|
||||
`ifelse(WANT_ADDRESSING,mit,
|
||||
`ifelse($#,1, ``$1'@')dnl
|
||||
ifelse($#,2,
|
||||
`ifelse($2,+, ``$1'@+',
|
||||
`ifelse($1,-, ``$2'@-',
|
||||
``$1'@($2)')')')dnl
|
||||
ifelse($#,3, ``$1'@(`$2':`$3')')dnl
|
||||
ifelse($#,4, ``$1'@(`$2':`$3':$4)')',
|
||||
|
||||
dnl WANT_ADDRESSING `motorola'
|
||||
`ifelse($#,1, `(`$1')')dnl
|
||||
ifelse($#,2,
|
||||
`ifelse($2,+, `(`$1')+',
|
||||
`ifelse($1,-, `-(`$2')',
|
||||
`$2(`$1')')')')dnl
|
||||
ifelse($#,3, `(`$1',`$2'.$3)')dnl
|
||||
ifelse($#,4, `(`$1',`$2'.$3*$4)')')')
|
||||
|
||||
|
||||
dnl Usage: addl etc
|
||||
dnl
|
||||
dnl m68k instructions with special handling for the suffix, with for
|
||||
dnl instance addl expanding to addl or add.l as necessary.
|
||||
dnl
|
||||
dnl See also t-m68k-defs.pl which verifies all mnemonics used in the asm
|
||||
dnl files have entries here.
|
||||
|
||||
dnl Called: m68k_insn(mnemonic,suffix)
|
||||
define(m68k_insn,
|
||||
m4_assert_numargs(2)
|
||||
m4_assert_defined(`WANT_DOT_SIZE')
|
||||
`ifelse(WANT_DOT_SIZE,yes, ``$1'.``$2''',
|
||||
``$1$2'')')
|
||||
|
||||
dnl Usage: m68k_definsn(mnemonic,suffix)
|
||||
define(m68k_definsn,
|
||||
m4_assert_numargs(2)
|
||||
`deflit($1`'$2,`m68k_insn(`$1',`$2')')')
|
||||
|
||||
m68k_definsn(add, l)
|
||||
m68k_definsn(addx, l)
|
||||
m68k_definsn(addq, l)
|
||||
m68k_definsn(asl, l)
|
||||
m68k_definsn(cmp, l)
|
||||
m68k_definsn(cmp, w)
|
||||
m68k_definsn(clr, l)
|
||||
m68k_definsn(divu, l)
|
||||
m68k_definsn(eor, w)
|
||||
m68k_definsn(lsl, l)
|
||||
m68k_definsn(lsr, l)
|
||||
m68k_definsn(move, l)
|
||||
m68k_definsn(move, w)
|
||||
m68k_definsn(movem,l)
|
||||
m68k_definsn(moveq,l)
|
||||
m68k_definsn(mulu, l)
|
||||
m68k_definsn(neg, l)
|
||||
m68k_definsn(or, l)
|
||||
m68k_definsn(roxl, l)
|
||||
m68k_definsn(roxr, l)
|
||||
m68k_definsn(sub, l)
|
||||
m68k_definsn(subx, l)
|
||||
m68k_definsn(subq, l)
|
||||
|
||||
|
||||
dnl Usage: bra etc
|
||||
dnl
|
||||
dnl Expand to `bra', `jra' or `jbra' according to what the assembler will
|
||||
dnl accept. The latter two give variable-sized branches in gas.
|
||||
dnl
|
||||
dnl See also t-m68k-defs.pl which verifies all the bXX branches used in the
|
||||
dnl asm files have entries here.
|
||||
|
||||
dnl Called: m68k_branch(cond)
|
||||
define(m68k_branch,
|
||||
m4_assert_numargs(1)
|
||||
m4_assert_defined(`WANT_BRANCHES')
|
||||
`ifelse(WANT_BRANCHES,jra, `j$1',
|
||||
`ifelse(WANT_BRANCHES,jbra,`jb$1',
|
||||
``b$1'')')')
|
||||
|
||||
dnl Called: m68k_defbranch(cond)
|
||||
define(m68k_defbranch,
|
||||
m4_assert_numargs(1)
|
||||
`deflit(b$1,`m68k_branch(`$1')')')
|
||||
|
||||
m68k_defbranch(ra)
|
||||
m68k_defbranch(cc)
|
||||
m68k_defbranch(cs)
|
||||
m68k_defbranch(ls)
|
||||
m68k_defbranch(eq)
|
||||
m68k_defbranch(ne)
|
||||
|
||||
|
||||
dnl Usage: scale_available_p
|
||||
dnl
|
||||
dnl Expand to 1 if a scale factor can be used in addressing modes, or 0 if
|
||||
dnl not. M(a0,d0,l,4), meaning a0+d0*4, is not available in 68000 or
|
||||
dnl 68010, but is in CPU32 and in 68020 and up.
|
||||
|
||||
define(scale_available_p,
|
||||
`m4_ifdef_anyof_p(
|
||||
`HAVE_HOST_CPU_m68360'
|
||||
`HAVE_HOST_CPU_m68020'
|
||||
`HAVE_HOST_CPU_m68030'
|
||||
`HAVE_HOST_CPU_m68040'
|
||||
`HAVE_HOST_CPU_m68060')')
|
||||
|
||||
|
||||
divert
|
||||
101
blender-5.2.0/extern/gmp-source/mpn/m68k/mc68020/aorsmul_1.asm
vendored
Normal file
101
blender-5.2.0/extern/gmp-source/mpn/m68k/mc68020/aorsmul_1.asm
vendored
Normal file
@@ -0,0 +1,101 @@
|
||||
dnl mc68020 mpn_addmul_1, mpn_submul_1 -- add or subtract mpn multiple.
|
||||
|
||||
dnl Copyright 1992, 1994, 1996, 1999-2002, 2011 Free Software Foundation, Inc.
|
||||
|
||||
dnl This file is part of the GNU MP Library.
|
||||
dnl
|
||||
dnl The GNU MP Library is free software; you can redistribute it and/or modify
|
||||
dnl it under the terms of either:
|
||||
dnl
|
||||
dnl * the GNU Lesser General Public License as published by the Free
|
||||
dnl Software Foundation; either version 3 of the License, or (at your
|
||||
dnl option) any later version.
|
||||
dnl
|
||||
dnl or
|
||||
dnl
|
||||
dnl * the GNU General Public License as published by the Free Software
|
||||
dnl Foundation; either version 2 of the License, or (at your option) any
|
||||
dnl later version.
|
||||
dnl
|
||||
dnl or both in parallel, as here.
|
||||
dnl
|
||||
dnl The GNU MP Library is distributed in the hope that it will be useful, but
|
||||
dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
dnl for more details.
|
||||
dnl
|
||||
dnl You should have received copies of the GNU General Public License and the
|
||||
dnl GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
dnl see https://www.gnu.org/licenses/.
|
||||
|
||||
include(`../config.m4')
|
||||
|
||||
C cycles/limb
|
||||
C 68040: 25
|
||||
|
||||
ifdef(`OPERATION_addmul_1',`
|
||||
define(M4_inst, addl)
|
||||
define(M4_function_1, mpn_addmul_1)
|
||||
',`ifdef(`OPERATION_submul_1',`
|
||||
define(M4_inst, subl)
|
||||
define(M4_function_1, mpn_submul_1)
|
||||
',
|
||||
`m4_error(`Need OPERATION_addmul_1 or OPERATION_submul_1
|
||||
')')')
|
||||
|
||||
|
||||
C INPUT PARAMETERS
|
||||
C res_ptr (sp + 4)
|
||||
C s1_ptr (sp + 8)
|
||||
C s1_size (sp + 12)
|
||||
C s2_limb (sp + 16)
|
||||
|
||||
define(res_ptr, `a0')
|
||||
define(s1_ptr, `a1')
|
||||
define(s1_size, `d2')
|
||||
define(s2_limb, `d4')
|
||||
|
||||
MULFUNC_PROLOGUE(mpn_addmul_1 mpn_submul_1)
|
||||
|
||||
PROLOGUE(M4_function_1)
|
||||
|
||||
C Save used registers on the stack.
|
||||
moveml d2-d5, M(-,sp)
|
||||
|
||||
C Copy the arguments to registers. Better use movem?
|
||||
movel M(sp,20), res_ptr
|
||||
movel M(sp,24), s1_ptr
|
||||
movel M(sp,28), s1_size
|
||||
movel M(sp,32), s2_limb
|
||||
|
||||
eorw #1, s1_size
|
||||
clrl d1
|
||||
clrl d5
|
||||
lsrl #1, s1_size
|
||||
bcc L(L1)
|
||||
subql #1, s1_size
|
||||
subl d0, d0 C (d0,cy) <= (0,0)
|
||||
|
||||
L(Loop):
|
||||
movel M(s1_ptr,+), d3
|
||||
mulul s2_limb, d1:d3
|
||||
addxl d0, d3
|
||||
addxl d5, d1
|
||||
M4_inst d3, M(res_ptr,+)
|
||||
L(L1): movel M(s1_ptr,+), d3
|
||||
mulul s2_limb, d0:d3
|
||||
addxl d1, d3
|
||||
addxl d5, d0
|
||||
M4_inst d3, M(res_ptr,+)
|
||||
|
||||
dbf s1_size, L(Loop)
|
||||
addxl d5, d0
|
||||
subl #0x10000, s1_size
|
||||
bcc L(Loop)
|
||||
|
||||
C Restore used registers from stack frame.
|
||||
moveml M(sp,+), d2-d5
|
||||
|
||||
rts
|
||||
|
||||
EPILOGUE(M4_function_1)
|
||||
96
blender-5.2.0/extern/gmp-source/mpn/m68k/mc68020/mul_1.asm
vendored
Normal file
96
blender-5.2.0/extern/gmp-source/mpn/m68k/mc68020/mul_1.asm
vendored
Normal file
@@ -0,0 +1,96 @@
|
||||
dnl mc68020 mpn_mul_1 -- mpn by limb multiply
|
||||
|
||||
dnl Copyright 1992, 1994, 1996, 1999-2002 Free Software Foundation, Inc.
|
||||
|
||||
dnl This file is part of the GNU MP Library.
|
||||
dnl
|
||||
dnl The GNU MP Library is free software; you can redistribute it and/or modify
|
||||
dnl it under the terms of either:
|
||||
dnl
|
||||
dnl * the GNU Lesser General Public License as published by the Free
|
||||
dnl Software Foundation; either version 3 of the License, or (at your
|
||||
dnl option) any later version.
|
||||
dnl
|
||||
dnl or
|
||||
dnl
|
||||
dnl * the GNU General Public License as published by the Free Software
|
||||
dnl Foundation; either version 2 of the License, or (at your option) any
|
||||
dnl later version.
|
||||
dnl
|
||||
dnl or both in parallel, as here.
|
||||
dnl
|
||||
dnl The GNU MP Library is distributed in the hope that it will be useful, but
|
||||
dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
dnl for more details.
|
||||
dnl
|
||||
dnl You should have received copies of the GNU General Public License and the
|
||||
dnl GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
dnl see https://www.gnu.org/licenses/.
|
||||
|
||||
include(`../config.m4')
|
||||
|
||||
C cycles/limb
|
||||
C 68040: 24
|
||||
|
||||
C INPUT PARAMETERS
|
||||
C res_ptr (sp + 4)
|
||||
C s1_ptr (sp + 8)
|
||||
C s1_size (sp + 12)
|
||||
C s2_limb (sp + 16)
|
||||
|
||||
|
||||
define(res_ptr, `a0')
|
||||
define(s1_ptr, `a1')
|
||||
define(s1_size, `d2')
|
||||
define(s2_limb, `d4')
|
||||
|
||||
|
||||
PROLOGUE(mpn_mul_1)
|
||||
|
||||
C Save used registers on the stack.
|
||||
moveml d2-d4, M(-,sp)
|
||||
|
||||
C movel d2, M(-,sp)
|
||||
C movel d3, M(-,sp)
|
||||
C movel d4, M(-,sp)
|
||||
|
||||
C Copy the arguments to registers. Better use movem?
|
||||
movel M(sp,16), res_ptr
|
||||
movel M(sp,20), s1_ptr
|
||||
movel M(sp,24), s1_size
|
||||
movel M(sp,28), s2_limb
|
||||
|
||||
eorw #1, s1_size
|
||||
clrl d1
|
||||
lsrl #1, s1_size
|
||||
bcc L(L1)
|
||||
subql #1, s1_size
|
||||
subl d0, d0 C (d0,cy) <= (0,0)
|
||||
|
||||
L(Loop):
|
||||
movel M(s1_ptr,+), d3
|
||||
mulul s2_limb, d1:d3
|
||||
addxl d0, d3
|
||||
movel d3, M(res_ptr,+)
|
||||
L(L1): movel M(s1_ptr,+), d3
|
||||
mulul s2_limb, d0:d3
|
||||
addxl d1, d3
|
||||
movel d3, M(res_ptr,+)
|
||||
|
||||
dbf s1_size, L(Loop)
|
||||
clrl d3
|
||||
addxl d3, d0
|
||||
subl #0x10000, s1_size
|
||||
bcc L(Loop)
|
||||
|
||||
C Restore used registers from stack frame.
|
||||
moveml M(sp,+), d2-d4
|
||||
|
||||
C movel M(sp,+),d4
|
||||
C movel M(sp,+),d3
|
||||
C movel M(sp,+),d2
|
||||
|
||||
rts
|
||||
|
||||
EPILOGUE(mpn_mul_1)
|
||||
45
blender-5.2.0/extern/gmp-source/mpn/m68k/mc68020/udiv.asm
vendored
Normal file
45
blender-5.2.0/extern/gmp-source/mpn/m68k/mc68020/udiv.asm
vendored
Normal file
@@ -0,0 +1,45 @@
|
||||
dnl mc68020 mpn_udiv_qrnnd -- 2x1 limb division
|
||||
|
||||
dnl Copyright 1999-2001 Free Software Foundation, Inc.
|
||||
|
||||
dnl This file is part of the GNU MP Library.
|
||||
dnl
|
||||
dnl The GNU MP Library is free software; you can redistribute it and/or modify
|
||||
dnl it under the terms of either:
|
||||
dnl
|
||||
dnl * the GNU Lesser General Public License as published by the Free
|
||||
dnl Software Foundation; either version 3 of the License, or (at your
|
||||
dnl option) any later version.
|
||||
dnl
|
||||
dnl or
|
||||
dnl
|
||||
dnl * the GNU General Public License as published by the Free Software
|
||||
dnl Foundation; either version 2 of the License, or (at your option) any
|
||||
dnl later version.
|
||||
dnl
|
||||
dnl or both in parallel, as here.
|
||||
dnl
|
||||
dnl The GNU MP Library is distributed in the hope that it will be useful, but
|
||||
dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
dnl for more details.
|
||||
dnl
|
||||
dnl You should have received copies of the GNU General Public License and the
|
||||
dnl GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
dnl see https://www.gnu.org/licenses/.
|
||||
|
||||
include(`../config.m4')
|
||||
|
||||
|
||||
C mp_limb_t mpn_udiv_qrnnd (mp_limb_t *rp,
|
||||
C mp_limb_t nh, mp_limb_t nl, mp_limb_t d);
|
||||
C
|
||||
|
||||
PROLOGUE(mpn_udiv_qrnnd)
|
||||
movel M(sp,4), a0 C rp
|
||||
movel M(sp,8), d1 C nh
|
||||
movel M(sp,12), d0 C nl
|
||||
divul M(sp,16), d1:d0
|
||||
movel d1, M(a0) C r
|
||||
rts
|
||||
EPILOGUE(mpn_udiv_qrnnd)
|
||||
44
blender-5.2.0/extern/gmp-source/mpn/m68k/mc68020/umul.asm
vendored
Normal file
44
blender-5.2.0/extern/gmp-source/mpn/m68k/mc68020/umul.asm
vendored
Normal file
@@ -0,0 +1,44 @@
|
||||
dnl mc68020 mpn_umul_ppmm -- limb by limb multiplication
|
||||
|
||||
dnl Copyright 1999-2001 Free Software Foundation, Inc.
|
||||
|
||||
dnl This file is part of the GNU MP Library.
|
||||
dnl
|
||||
dnl The GNU MP Library is free software; you can redistribute it and/or modify
|
||||
dnl it under the terms of either:
|
||||
dnl
|
||||
dnl * the GNU Lesser General Public License as published by the Free
|
||||
dnl Software Foundation; either version 3 of the License, or (at your
|
||||
dnl option) any later version.
|
||||
dnl
|
||||
dnl or
|
||||
dnl
|
||||
dnl * the GNU General Public License as published by the Free Software
|
||||
dnl Foundation; either version 2 of the License, or (at your option) any
|
||||
dnl later version.
|
||||
dnl
|
||||
dnl or both in parallel, as here.
|
||||
dnl
|
||||
dnl The GNU MP Library is distributed in the hope that it will be useful, but
|
||||
dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
dnl for more details.
|
||||
dnl
|
||||
dnl You should have received copies of the GNU General Public License and the
|
||||
dnl GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
dnl see https://www.gnu.org/licenses/.
|
||||
|
||||
include(`../config.m4')
|
||||
|
||||
|
||||
C mp_limb_t mpn_umul_ppmm (mp_limb_t *lp, mp_limb_t x, mp_limb_t y);
|
||||
C
|
||||
|
||||
PROLOGUE(mpn_umul_ppmm)
|
||||
movel M(sp,4), a0 C lp
|
||||
movel M(sp,8), d1 C x
|
||||
movel M(sp,12), d0 C y
|
||||
mulul d0, d0:d1
|
||||
movel d1, M(a0) C low
|
||||
rts
|
||||
EPILOGUE(mpn_umul_ppmm)
|
||||
175
blender-5.2.0/extern/gmp-source/mpn/m68k/rshift.asm
vendored
Normal file
175
blender-5.2.0/extern/gmp-source/mpn/m68k/rshift.asm
vendored
Normal file
@@ -0,0 +1,175 @@
|
||||
dnl mc68020 mpn_rshift -- mpn right shift.
|
||||
|
||||
dnl Copyright 1996, 1999-2003 Free Software Foundation, Inc.
|
||||
|
||||
dnl This file is part of the GNU MP Library.
|
||||
dnl
|
||||
dnl The GNU MP Library is free software; you can redistribute it and/or modify
|
||||
dnl it under the terms of either:
|
||||
dnl
|
||||
dnl * the GNU Lesser General Public License as published by the Free
|
||||
dnl Software Foundation; either version 3 of the License, or (at your
|
||||
dnl option) any later version.
|
||||
dnl
|
||||
dnl or
|
||||
dnl
|
||||
dnl * the GNU General Public License as published by the Free Software
|
||||
dnl Foundation; either version 2 of the License, or (at your option) any
|
||||
dnl later version.
|
||||
dnl
|
||||
dnl or both in parallel, as here.
|
||||
dnl
|
||||
dnl The GNU MP Library is distributed in the hope that it will be useful, but
|
||||
dnl WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
||||
dnl or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
||||
dnl for more details.
|
||||
dnl
|
||||
dnl You should have received copies of the GNU General Public License and the
|
||||
dnl GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
dnl see https://www.gnu.org/licenses/.
|
||||
|
||||
include(`../config.m4')
|
||||
|
||||
|
||||
C cycles/limb
|
||||
C shift==1 shift>1
|
||||
C 68040: 9 12
|
||||
|
||||
|
||||
C mp_limb_t mpn_rshift (mp_ptr res_ptr, mp_srcptr s_ptr, mp_size_t s_size,
|
||||
C unsigned cnt);
|
||||
C
|
||||
C The "cnt" parameter is either 16 bits or 32 bits depending on
|
||||
C SIZEOF_UNSIGNED (see ABI notes in mpn/m68k/README). The value is of
|
||||
C course only 1 to 31. When loaded as 16 bits there's garbage in the upper
|
||||
C half, hence the use of cmpw. The shift instructions take the their count
|
||||
C modulo 64, so the upper part doesn't matter to them either.
|
||||
C
|
||||
|
||||
C INPUT PARAMETERS
|
||||
C res_ptr (sp + 4)
|
||||
C s_ptr (sp + 8)
|
||||
C s_size (sp + 12)
|
||||
C cnt (sp + 16)
|
||||
|
||||
define(res_ptr, `a1')
|
||||
define(s_ptr, `a0')
|
||||
define(s_size, `d6')
|
||||
define(cnt, `d4')
|
||||
|
||||
ifdef(`SIZEOF_UNSIGNED',,
|
||||
`m4_error(`SIZEOF_UNSIGNED not defined, should be in config.m4
|
||||
')')
|
||||
|
||||
PROLOGUE(mpn_rshift)
|
||||
C Save used registers on the stack.
|
||||
moveml d2-d6/a2, M(-,sp)
|
||||
|
||||
C Copy the arguments to registers.
|
||||
movel M(sp,28), res_ptr
|
||||
movel M(sp,32), s_ptr
|
||||
movel M(sp,36), s_size
|
||||
ifelse(SIZEOF_UNSIGNED,2,
|
||||
` movew M(sp,40), cnt',
|
||||
` movel M(sp,40), cnt')
|
||||
|
||||
moveql #1, d5
|
||||
cmpw d5, cnt
|
||||
bne L(Lnormal)
|
||||
cmpl res_ptr, s_ptr
|
||||
bls L(Lspecial) C jump if res_ptr >= s_ptr
|
||||
|
||||
ifelse(scale_available_p,1,`
|
||||
lea M(res_ptr,s_size,l,4), a2
|
||||
',`
|
||||
movel s_size, d0
|
||||
asll #2, d0
|
||||
lea M(res_ptr,d0,l), a2
|
||||
')
|
||||
cmpl s_ptr, a2
|
||||
bls L(Lspecial) C jump if s_ptr >= res_ptr + s_size
|
||||
|
||||
L(Lnormal):
|
||||
moveql #32, d5
|
||||
subl cnt, d5
|
||||
movel M(s_ptr,+), d2
|
||||
movel d2, d0
|
||||
lsll d5, d0 C compute carry limb
|
||||
|
||||
lsrl cnt, d2
|
||||
movel d2, d1
|
||||
subql #1, s_size
|
||||
beq L(Lend)
|
||||
lsrl #1, s_size
|
||||
bcs L(L1)
|
||||
subql #1, s_size
|
||||
|
||||
L(Loop):
|
||||
movel M(s_ptr,+), d2
|
||||
movel d2, d3
|
||||
lsll d5, d3
|
||||
orl d3, d1
|
||||
movel d1, M(res_ptr,+)
|
||||
lsrl cnt, d2
|
||||
L(L1):
|
||||
movel M(s_ptr,+), d1
|
||||
movel d1, d3
|
||||
lsll d5, d3
|
||||
orl d3, d2
|
||||
movel d2, M(res_ptr,+)
|
||||
lsrl cnt, d1
|
||||
|
||||
dbf s_size, L(Loop)
|
||||
subl #0x10000, s_size
|
||||
bcc L(Loop)
|
||||
|
||||
L(Lend):
|
||||
movel d1, M(res_ptr) C store most significant limb
|
||||
|
||||
C Restore used registers from stack frame.
|
||||
moveml M(sp,+), d2-d6/a2
|
||||
rts
|
||||
|
||||
C We loop from most significant end of the arrays, which is only permissable
|
||||
C if the source and destination don't overlap, since the function is
|
||||
C documented to work for overlapping source and destination.
|
||||
|
||||
L(Lspecial):
|
||||
ifelse(scale_available_p,1,`
|
||||
lea M(s_ptr,s_size,l,4), s_ptr
|
||||
lea M(res_ptr,s_size,l,4), res_ptr
|
||||
',`
|
||||
movel s_size, d0
|
||||
asll #2, d0
|
||||
addl d0, s_ptr
|
||||
addl d0, res_ptr
|
||||
')
|
||||
|
||||
clrl d0 C initialize carry
|
||||
eorw #1, s_size
|
||||
lsrl #1, s_size
|
||||
bcc L(LL1)
|
||||
subql #1, s_size
|
||||
|
||||
L(LLoop):
|
||||
movel M(-,s_ptr), d2
|
||||
roxrl #1, d2
|
||||
movel d2, M(-,res_ptr)
|
||||
L(LL1):
|
||||
movel M(-,s_ptr), d2
|
||||
roxrl #1, d2
|
||||
movel d2, M(-,res_ptr)
|
||||
|
||||
dbf s_size, L(LLoop)
|
||||
roxrl #1, d0 C save cy in msb
|
||||
subl #0x10000, s_size
|
||||
bcs L(LLend)
|
||||
addl d0, d0 C restore cy
|
||||
bra L(LLoop)
|
||||
|
||||
L(LLend):
|
||||
C Restore used registers from stack frame.
|
||||
moveml M(sp,+), d2-d6/a2
|
||||
rts
|
||||
|
||||
EPILOGUE(mpn_rshift)
|
||||
91
blender-5.2.0/extern/gmp-source/mpn/m68k/t-m68k-defs.pl
vendored
Normal file
91
blender-5.2.0/extern/gmp-source/mpn/m68k/t-m68k-defs.pl
vendored
Normal file
@@ -0,0 +1,91 @@
|
||||
#! /usr/bin/perl -w
|
||||
|
||||
# Copyright 2001, 2003 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 either:
|
||||
#
|
||||
# * the GNU Lesser General Public License as published by the Free
|
||||
# Software Foundation; either version 3 of the License, or (at your
|
||||
# option) any later version.
|
||||
#
|
||||
# or
|
||||
#
|
||||
# * the GNU General Public License as published by the Free Software
|
||||
# Foundation; either version 2 of the License, or (at your option) any
|
||||
# later version.
|
||||
#
|
||||
# or both in parallel, as here.
|
||||
#
|
||||
# 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 General Public License
|
||||
# for more details.
|
||||
#
|
||||
# You should have received copies of the GNU General Public License and the
|
||||
# GNU Lesser General Public License along with the GNU MP Library. If not,
|
||||
# see https://www.gnu.org/licenses/.
|
||||
|
||||
|
||||
# Usage: perl t-m68k-defs.pl [-t]
|
||||
#
|
||||
# Run this in the mpn/m68k source directory to check that m68k-defs.m4 has
|
||||
# m68k_defbranch()s or m68k_definsn()s for each instruction used in *.asm
|
||||
# and */*.asm. Print nothing if everything is ok. The -t option prints
|
||||
# some diagnostic traces.
|
||||
|
||||
use strict;
|
||||
use Getopt::Std;
|
||||
|
||||
my %opt;
|
||||
getopts('t', \%opt);
|
||||
|
||||
my %branch;
|
||||
my %insn;
|
||||
|
||||
open(FD, "<m68k-defs.m4")
|
||||
or die "Cannot open m68k-defs.m4: $!\nIs this the mpn/m68k source directory?\n";
|
||||
my ($srcdir, $top_srcdir);
|
||||
while (<FD>) {
|
||||
if (/^m68k_defbranch\(\s*(.*)\)/) { $branch{"b".$1} = 1; }
|
||||
if (/^m68k_definsn\(\s*(.*),\s*(.*)\)/) { $insn{$1.$2} = 1; }
|
||||
}
|
||||
close(FD);
|
||||
|
||||
print "branches: ", join(" ",keys(%branch)), "\n" if $opt{'t'};
|
||||
print "insns: ", join(" ",keys(%insn)), "\n" if $opt{'t'};
|
||||
|
||||
|
||||
foreach my $file (glob("*.asm"), glob("*/*.asm")) {
|
||||
print "file $file\n" if $opt{'t'};
|
||||
|
||||
open(FD, "<$file") or die "Cannot open $file: $!";
|
||||
while (<FD>) {
|
||||
if (/^[ \t]*C/) { next; };
|
||||
if (/^\t([a-z0-9]+)/) {
|
||||
my $opcode = $1;
|
||||
print "opcode $1\n" if $opt{'t'};
|
||||
|
||||
# instructions with an l, w or b suffix should have a definsn
|
||||
# (unless they're already a defbranch)
|
||||
if ($opcode =~ /[lwb]$/
|
||||
&& ! defined $insn{$opcode}
|
||||
&& ! defined $branch{$opcode})
|
||||
{
|
||||
print "$file: $.: missing m68k_definsn: $opcode\n";
|
||||
}
|
||||
|
||||
# instructions bXX should have a defbranch (unless they're
|
||||
# already a definsn)
|
||||
if ($opcode =~ /^b/
|
||||
&& ! defined $insn{$opcode}
|
||||
&& ! defined $branch{$opcode})
|
||||
{
|
||||
print "$file: $.: missing m68k_defbranch: $opcode\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
close(FD);
|
||||
}
|
||||
Reference in New Issue
Block a user