mpn_rshift / mpn_lshift bug on m68000
Patrick Pelissier
Patrick.Pelissier at loria.fr
Fri Oct 24 11:09:04 CEST 2003
I have tried, and it seems to work for every shift.
Nevertheless, in this extract of rshift.asm/lshift.asm:
L(Lnormal):
moveql #32, d5 <<<<<<<<<<<<<<<<<<<<<<<<<<<<<
subl cnt, d5
ifelse(scale_available_p,1,`
even it is safe, I would use subw cnt, d5
Sincerely,
Patrick Pelissier
Kevin Ryde a écrit:
> Patrick Pelissier <Patrick.Pelissier at loria.fr> writes:
>
>> On all systems based on a 68000 (a real 68000, not a 68030, a 68040
>>or a 68060), the convention is int=short, and the stack is 16 bits
>>aligned.
>
>
> No, such a convention is an aspect of the system, not of the
> processor.
>
>
>> I am currently porting GMP to such a system. It is the ti-68k
>>calculator (Ti-89, Ti-92+ and V200) using gcc,
>
>
> You should have included that information in your first message.
>
>
> Diffs below for the shift routines. Please test them (including the
> shift-by-1 case). If they work I'll make some autoconfery for
> SIZEOF_INT.
>
>
>
> ------------------------------------------------------------------------
>
> --- lshift.asm.~1.7.~ 1970-01-01 10:00:01.000000000 +1000
> +++ lshift.asm 2003-10-23 07:35:17.000000000 +1000
> @@ -21,6 +21,8 @@
>
> include(`../config.m4')
>
> +define(SIZEOF_INT,2)
> +
>
> C cycles/limb
> C shift==1 shift>1
> @@ -46,10 +48,12 @@
> movel M(sp,28), res_ptr
> movel M(sp,32), s_ptr
> movel M(sp,36), s_size
> - movel M(sp,40), cnt
> +ifelse(SIZEOF_INT,2,
> +` movew M(sp,40), cnt',
> +` movel M(sp,40), cnt')
>
> moveql #1, d5
> - cmpl d5, cnt
> + cmpw d5, cnt
> bne L(Lnormal)
> cmpl s_ptr, res_ptr
> bls L(Lspecial) C jump if s_ptr >= res_ptr
>
>
> ------------------------------------------------------------------------
>
> --- rshift.asm.~1.6.~ 1970-01-01 10:00:01.000000000 +1000
> +++ rshift.asm 2003-10-23 07:31:11.000000000 +1000
> @@ -21,6 +21,8 @@
>
> include(`../config.m4')
>
> +define(SIZEOF_INT,2)
> +
>
> C cycles/limb
> C shift==1 shift>1
> @@ -46,10 +48,12 @@
> movel M(sp,28), res_ptr
> movel M(sp,32), s_ptr
> movel M(sp,36), s_size
> - movel M(sp,40), cnt
> +ifelse(SIZEOF_INT,2,
> +` movew M(sp,40), cnt',
> +` movel M(sp,40), cnt')
>
> moveql #1, d5
> - cmpl d5, cnt
> + cmpw d5, cnt
> bne L(Lnormal)
> cmpl res_ptr, s_ptr
> bls L(Lspecial) C jump if res_ptr >= s_ptr
More information about the gmp-bugs
mailing list