I'm just curious,

I have a funtion that returns the element of a struct from and array of
structs.. Hope that made sense.

Any way I found that doing
*Code:*

void test(uint8_t axis_index) {
   return (_axis[axis_index].state);
}


produces
*Code:*

     110:   90 e0          ldi   r25, 0x00   ; 0
     112:   9c 01          movw   r18, r24
     114:   22 0f          add   r18, r18
     116:   33 1f          adc   r19, r19
     118:   22 0f          add   r18, r18
     11a:   33 1f          adc   r19, r19
     11c:   f9 01          movw   r30, r18
     11e:   ee 0f          add   r30, r30
     120:   ff 1f          adc   r31, r31
     122:   ee 0f          add   r30, r30
     124:   ff 1f          adc   r31, r31
     126:   ee 0f          add   r30, r30
     128:   ff 1f          adc   r31, r31
     12a:   e2 1b          sub   r30, r18
     12c:   f3 0b          sbc   r31, r19
     12e:   e8 0f          add   r30, r24
     130:   f9 1f          adc   r31, r25
     132:   ec 58          subi   r30, 0x8C   ; 140
     134:   ff 4f          sbci   r31, 0xFF   ; 255
     136:   80 81          ld   r24, Z
     138:   83 70          andi   r24, 0x03   ; 3
     13a:   08 95          ret



while
*Code:*

void test(uint8_t axis_index) {
   axis_control_s* axis = (axis_control_s*) &_axis[axis_index];
   return (axis->state);
}



produces
*Code:*

     110:   9d e1          ldi   r25, 0x1D   ; 29
     112:   89 9f          mul   r24, r25
     114:   f0 01          movw   r30, r0
     116:   11 24          eor   r1, r1
     118:   e2 59          subi   r30, 0x92   ; 146
     11a:   ff 4f          sbci   r31, 0xFF   ; 255
     11c:   86 81          ldd   r24, Z+6   ; 0x06
     11e:   83 70          andi   r24, 0x03   ; 3
     120:   08 95          ret


Using winavr WinAVR-20080610 and -O2

A considerable differnce in size and speed.

Seems like the pointer get optimized but the array indexing does not.
_______________________________________________
AVR-GCC-list mailing list
AVR-GCC-list@nongnu.org
http://lists.nongnu.org/mailman/listinfo/avr-gcc-list

Reply via email to