public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug target/11831] New: [ARM] Logical expression evaluation with condition fields
@ 2003-08-06  9:35 alga at rgai dot hu
  2003-08-06 12:48 ` [Bug target/11831] " pinskia at physics dot uc dot edu
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: alga at rgai dot hu @ 2003-08-06  9:35 UTC (permalink / raw)
  To: gcc-bugs

PLEASE REPLY TO gcc-bugzilla@gcc.gnu.org ONLY, *NOT* gcc-bugs@gcc.gnu.org.

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11831

           Summary: [ARM] Logical expression evaluation with condition
                    fields
           Product: gcc
           Version: 3.4
            Status: UNCONFIRMED
          Severity: minor
          Priority: P3
         Component: target
        AssignedTo: unassigned at gcc dot gnu dot org
        ReportedBy: alga at rgai dot hu
                CC: gcc-bugs at gcc dot gnu dot org
 GCC build triplet: i686-pc-linux-gnu
  GCC host triplet: i686-pc-linux-gnu
GCC target triplet: arm-unknown-elf

For translating a compound logical expression GCC uses an ldm instruction to
interrupt the evaluation of conditions fields. When optimizing for size
it would be promising to use condition fields instead of the ldm, if possible.

--- c example ---
int func(char*);
int foo (char* name)
{
   int n = func (name);
   return
      (name[n-4] == 'a' &&
       name[n-3] == 'b' &&
       name[n-2] == 'c' &&
       name[n-1] == 'd');
}

--- arm code ---
foo:
 mov ip, sp
 stmfd sp!, {r4, fp, ip, lr, pc}
 sub fp, ip, #4
 mov r4, r0
 bl func
 add r4, r4, r0
 ldrb r3, [r4, #-4]
 cmp r3, #97
 mov r0, #0 <- OLD
 ldmneea fp, {r4, fp, sp, pc} <- OLD
 ldrb r3, [r4, #-3] <- OLD
 cmp r3, #98 <- OLD
 ldmneea fp, {r4, fp, sp, pc} <- OLD
 ldrb r3, [r4, #-2] <- OLD
 cmp r3, #99 <- OLD
 ldmneea fp, {r4, fp, sp, pc} <- OLD
 ldrb r3, [r4, #-1] <- OLD
 cmp r3, #100 <- OLD
 movne r0, #0
 moveq r0, #1
 ldmea fp, {r4, fp, sp, pc}

--- possible solution ---
foo:
 mov ip, sp
 stmfd sp!, {r4, fp, ip, lr, pc}
 sub fp, ip, #4
 mov r4, r0
 bl func
 add r4, r4, r0
 ldrb r3, [r4, #-4]
 cmp r3, #97
 ldreqb r3, [r4, #-3] <- NEW
 cmpeq r3, #98 <- NEW
 ldreqb r3, [r4, #-2] <- NEW
 cmpeq r3, #99 <- NEW
 ldreqb r3, [r4, #-1] <- NEW
 cmpeq r3, #100 <- NEW
 movne r0, #0
 moveq r0, #1
 ldmea fp, {r4, fp, sp, pc}


^ permalink raw reply	[flat|nested] 8+ messages in thread
[parent not found: <20030806093541.11831.loki@gcc.gnu.org>]
[parent not found: <bug-11831-5666@http.gcc.gnu.org/bugzilla/>]

end of thread, other threads:[~2009-03-13 12:33 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-08-06  9:35 [Bug target/11831] New: [ARM] Logical expression evaluation with condition fields alga at rgai dot hu
2003-08-06 12:48 ` [Bug target/11831] " pinskia at physics dot uc dot edu
2003-08-11 12:45 ` pinskia at gcc dot gnu dot org
2003-08-25 15:57 ` [Bug optimization/11831] " dhazeghi at yahoo dot com
     [not found] <20030806093541.11831.loki@gcc.gnu.org>
2005-09-27  3:01 ` [Bug target/11831] " raj dot khem at gmail dot com
2005-09-27 13:43 ` pinskia at gcc dot gnu dot org
2005-09-27 13:47 ` pinskia at gcc dot gnu dot org
     [not found] <bug-11831-5666@http.gcc.gnu.org/bugzilla/>
2009-03-13 12:33 ` ramana dot r at gmail dot com

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).