osd-contiki/cpu/stm32w108/hal/micro/cortexm3
Benoît Thébaudeau 19fd7a3551 Use additive offsets
OR-ing an offset to a base address instead of adding it is dangerous
because it can only work if the base address is aligned enough for the
offset.

Moreover, if the base address or the offset has a value unknown at
compile time, then the assembly instructions dedicated to 'base +
offset' addressing on most CPUs can't be emitted by the compiler because
this would require the alignment of the base address against the offset
to be known in order to optimize 'base | offset' into 'base + offset'.
In that case, the compiler has to emit more instructions in order to
compute 'base | offset' on most CPUs, e.g. on ARM, which means larger
binary size and slower execution.

Hence, replace all occurrences of 'base | offset' with 'base + offset'.
This must become a coding rule.

Here are the results for the cc2538-demo example:
 - Compilation of uart_init():
    * before:
        REG(regs->base | UART_CC) = 0;
        200b78:	f446 637c 	orr.w	r3, r6, #4032	; 0xfc0
        200b7c:	f043 0308 	orr.w	r3, r3, #8
        200b80:	2200      	movs	r2, #0
        200b82:	601a      	str	r2, [r3, #0]

    * now:
        REG(regs->base + UART_CC) = 0;
        200b7a:	2300      	movs	r3, #0
        200b7c:	f8c4 3fc8 	str.w	r3, [r4, #4040]	; 0xfc8

 - Size of the .text section:
    * before:	0x4c7c
    * now:	0x4c28
    * saved:	84 bytes

Signed-off-by: Benoît Thébaudeau <benoit.thebaudeau.dev@gmail.com>
2015-03-28 17:28:15 +01:00
..
bootloader A massive all-tree automated update of all double inclusion guard #defines that changes from using two underscores as a prefix, which are reserved, to not using two underscores as a prefix 2013-11-24 20:20:11 +01:00
compiler [doc] Various fixes for doxygen grouping etc. 2014-11-10 23:53:32 +01:00
stm32w108 Correct several doxygen tags (\file) 2014-07-28 11:11:45 +02:00
adc.c Correct several doxygen tags (\file) 2014-07-28 11:11:45 +02:00
board.c Removing trailing whitespaces 2014-06-30 20:01:05 +02:00
button.c Cleanup and refactoring of the STM32w port 2013-03-18 13:31:26 +01:00
clocks.c Cleanup and refactoring of the STM32w port 2013-03-18 13:31:26 +01:00
context-switch.s79 Cleanup and refactoring of the STM32w port 2013-03-18 13:31:26 +01:00
cstartup-m.s Fixed mbxxx platform 2013-07-11 17:56:17 +02:00
flash.c Cleanup and refactoring of the STM32w port 2013-03-18 13:31:26 +01:00
flash.h [doc] Various fixes for doxygen grouping etc. 2014-11-10 23:53:32 +01:00
iap_bootloader.h New HAL and SimpleMAC for STM32W108. 2011-03-22 19:35:49 +01:00
led.c Cleanup and refactoring of the STM32w port 2013-03-18 13:31:26 +01:00
memmap-fat.h A massive all-tree automated update of all double inclusion guard #defines that changes from using two underscores as a prefix, which are reserved, to not using two underscores as a prefix 2013-11-24 20:20:11 +01:00
memmap.h A massive all-tree automated update of all double inclusion guard #defines that changes from using two underscores as a prefix, which are reserved, to not using two underscores as a prefix 2013-11-24 20:20:11 +01:00
mems.c Correct several doxygen tags (\file) 2014-07-28 11:11:45 +02:00
mfg-token.c Use additive offsets 2015-03-28 17:28:15 +01:00
mfg-token.h Correct several doxygen tags (\file) 2014-07-28 11:11:45 +02:00
micro-common-internal.c Cleanup and refactoring of the STM32w port 2013-03-18 13:31:26 +01:00
micro-common.c Cleanup and refactoring of the STM32w port 2013-03-18 13:31:26 +01:00
micro-common.h Correct several doxygen tags (\file) 2014-07-28 11:11:45 +02:00
micro.c Cleanup and refactoring of the STM32w port 2013-03-18 13:31:26 +01:00
mpu.h A massive all-tree automated update of all double inclusion guard #defines that changes from using two underscores as a prefix, which are reserved, to not using two underscores as a prefix 2013-11-24 20:20:11 +01:00
nvm-def.h A massive all-tree automated update of all double inclusion guard #defines that changes from using two underscores as a prefix, which are reserved, to not using two underscores as a prefix 2013-11-24 20:20:11 +01:00
nvm.c Cleanup and refactoring of the STM32w port 2013-03-18 13:31:26 +01:00
nvm.h [doc] Various fixes for doxygen grouping etc. 2014-11-10 23:53:32 +01:00
sleep.c Cleanup and refactoring of the STM32w port 2013-03-18 13:31:26 +01:00
spmr.s79 Cleanup and refactoring of the STM32w port 2013-03-18 13:31:26 +01:00
system-timer.c Cleanup and refactoring of the STM32w port 2013-03-18 13:31:26 +01:00
temperature-sensor.c Correct several doxygen tags (\file) 2014-07-28 11:11:45 +02:00
token-manufacturing.h Cleanup and refactoring of the STM32w port 2013-03-18 13:31:26 +01:00
uart.c Cleanup and refactoring of the STM32w port 2013-03-18 13:31:26 +01:00
uart.h A massive all-tree automated update of all double inclusion guard #defines that changes from using two underscores as a prefix, which are reserved, to not using two underscores as a prefix 2013-11-24 20:20:11 +01:00