qemu-arm
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 0/2] arm: Implement M-profile trapping on division by zero


From: Richard Henderson
Subject: Re: [PATCH 0/2] arm: Implement M-profile trapping on division by zero
Date: Mon, 2 Aug 2021 12:23:05 -1000
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.11.0

On 7/30/21 5:16 AM, Peter Maydell wrote:
Unlike A-profile, for M-profile the UDIV and SDIV insns can be
configured to raise an exception on division by zero, using the CCR
DIV_0_TRP bit.  This patchset implements that missing functionality
by having the udiv and sdiv helpers raise an exception if needed.

Some questions:

Is it worth allowing A-profile to retain the mildly better codegen it
gets from not having to pass in 'env' and marking the helper as
no-side-effects (ie having M-specific udiv/sdiv helpers) ?

Probably not.

Is it worth inlining either udiv or sdiv for the A-profile case?

Probably not.

   mov_i32 tmp3,r2
   mov_i32 tmp6,r3
   movcond_i32 tmp3,tmp6,$0x0,$0x0,tmp3,eq
   movcond_i32 tmp6,tmp6,$0x0,$0x1,tmp6,eq
   mov_i32 tmp7,$0x0
   divu2_i32 tmp3,tmp7,tmp3,tmp7,tmp6
   mov_i32 r3,tmp3

but the x86 code is
0x7f5f1807dc0c:  45 33 f6                 xorl     %r14d, %r14d
0x7f5f1807dc0f:  45 85 ed                 testl    %r13d, %r13d
0x7f5f1807dc12:  45 0f 44 e6              cmovel   %r14d, %r12d


At the start of the first movcond, $0x0 is not allocated to a register, and the constraints allow a constant for argument 3. Then, constraints do not allow a constant for argument 4 so we load $0x0 into a register.

0x7f5f1807dc16:  41 bf 01 00 00 00        movl     $1, %r15d
0x7f5f1807dc1c:  45 3b ee                 cmpl     %r14d, %r13d
0x7f5f1807dc1f:  45 0f 44 ef              cmovel   %r15d, %r13d

At the start of the second movcond, $0x0 is loaded into a register, so we use 
it.

(Ideally of
course it would notice that it already had generated the condition
check and not repeat it.)

Yep.


r~



reply via email to

[Prev in Thread] Current Thread [Next in Thread]