AVR-GCC: Ist > schneller als >=?

Gast #2462928
Lesenswert?

Mit AVR-GCC was ist schneller mit Ganzzahlen?

if (x >= 5) ...

oder

if (x > 4) ...

oder ist gleichwertig, weil der Compiler optimiert (Flag nötig?)


PS: Bitte keine spekulativen "Meinungen" posten, oder "probiers doch 
aus". Wissen ist gefragt, und das fehlt mir leider in diesem Punkt.
#2462941
Lesenswert?

Naja es ist eindeutig !

Hier das Ergebnis für 8-Bit
1
volatile uint8_t x, y;
2
 volatile uint8_t d = 0;
3
  40:  1b 82         std  Y+3, r1  ; 0x03
4
 
5
  x = 1;
6
  42:  91 e0         ldi  r25, 0x01  ; 1
7
  44:  99 83         std  Y+1, r25  ; 0x01
8
  y = 1;
9
  46:  9a 83         std  Y+2, r25  ; 0x02
10

11
  if (x >= 5)
12
  48:  89 81         ldd  r24, Y+1  ; 0x01
13
  4a:  85 30         cpi  r24, 0x05  ; 5
14
  4c:  08 f0         brcs  .+2        ; 0x50 <__SREG__+0x11>
15
  {
16
    d = 1;
17
  4e:  9b 83         std  Y+3, r25  ; 0x03
18
  }
19

20

21
  if (y > 4)
22
  50:  8a 81         ldd  r24, Y+2  ; 0x02
23
  52:  85 30         cpi  r24, 0x05  ; 5
24
  54:  10 f0         brcs  .+4        ; 0x5a <__SREG__+0x1b>
25
  {
26
    d = 2;
27
  56:  82 e0         ldi  r24, 0x02  ; 2
28
  58:  8b 83         std  Y+3, r24  ; 0x03

und so sieht das C-Programm aus:
1
int main (void)
2
{
3
 volatile uint8_t x, y;
4
 volatile uint8_t d = 0;
5
 
6
  x = 1;
7
  y = 1;
8

9
  if (x >= 5)
10
  {
11
    d = 1;
12
  }
13

14

15
  if (y > 4)
16
  {
17
    d = 2;
18
  }
19

20
  for (;;) 
21
  {
22
  }
23
  
24
}
#2462944
Lesenswert?

Wenn der Datentyp für x,y int ist, dann macht das mein GCC wie folgt:
1
 volatile int x, y;
2
 volatile uint8_t d = 0;
3
  42:  19 82         std  Y+1, r1  ; 0x01
4
 
5
  x = 1;
6
  44:  81 e0         ldi  r24, 0x01  ; 1
7
  46:  90 e0         ldi  r25, 0x00  ; 0
8
  48:  9b 83         std  Y+3, r25  ; 0x03
9
  4a:  8a 83         std  Y+2, r24  ; 0x02
10
  y = 1;
11
  4c:  9d 83         std  Y+5, r25  ; 0x05
12
  4e:  8c 83         std  Y+4, r24  ; 0x04
13

14
  if (x >= 5)
15
  50:  8a 81         ldd  r24, Y+2  ; 0x02
16
  52:  9b 81         ldd  r25, Y+3  ; 0x03
17
  54:  05 97         sbiw  r24, 0x05  ; 5
18
  56:  14 f0         brlt  .+4        ; 0x5c <__SREG__+0x1d>
19
  {
20
    d = 1;
21
  58:  81 e0         ldi  r24, 0x01  ; 1
22
  5a:  89 83         std  Y+1, r24  ; 0x01
23
  }
24

25

26
  if (y > 4)
27
  5c:  8c 81         ldd  r24, Y+4  ; 0x04
28
  5e:  9d 81         ldd  r25, Y+5  ; 0x05
29
  60:  05 97         sbiw  r24, 0x05  ; 5
30
  62:  14 f0         brlt  .+4        ; 0x68 <__SREG__+0x29>
31
  {
32
    d = 2;
33
  64:  82 e0         ldi  r24, 0x02  ; 2
34
  66:  89 83         std  Y+1, r24  ; 0x01
35
   }
Gast #2462946
Lesenswert?

Hallo,

ich habe es mal ausprobiert.
Bei beiden Fällen hat der Compiler bei mir ein
1
CPI R24,0x05
 daraus gemacht und auch sonst war der Rest gleich. Optimierung stand 
auf -Os.
Meine Antwort zur Frage also nein. Was anderes hätte mich aber auch 
gewundert.
Gast #2463068
Lesenswert?

Bartli schrieb:
> Dir ist aber schon klar, dass die anderen jetzt genau das gemacht haben

Dir ist aber hoffentlich auch klar, dass es einen Unterschied macht, ob 
man dem Fragesteller das Probieren selbst überlässt (was er wohl nicht 
selbst konnte), oder ihm ein hilfreiches Beispiel zeigt?
Gast #2463090
Lesenswert?

Klugscheisser schrieb:
> Dir ist aber hoffentlich auch klar, dass es einen Unterschied macht, ob
> man dem Fragesteller das Probieren selbst überlässt (was er wohl nicht
> selbst konnte), oder ihm ein hilfreiches Beispiel zeigt?

Warum sollte man, schließlich lässt seine Aussage darauf schließen, dass 
er ohnehin nichts lernen will.
Gast #2463146
Lesenswert?

Na du bist ja ein Scherzkeks. Merkst du eigentlich wie du selber Wasser 
predigst und Wein säufst?

Hier

>Vermutlich wolltest Du es selber wissen :-)

unterstellst du mir ich würde -S nicht kennen und kurze Zeit später 
bezeichnest du andere Leute als Berufsspekulant...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren