Compile time macro trouble.

Taylor Hillegeist via digitalmars-d-ldc digitalmars-d-ldc at puremagic.com
Sat Mar 12 22:15:34 PST 2016


So here: https://dlang.org/pretod.html
there is a lovely section about how doing normal functions is 
basically a processor macro.

The C Preprocessor Way:
#define X(i)	((i) = (i) / 3)

The D Way:
int X(ref int i) { return i = i / 3; }

However I am running into troubles with the truthfulness of this 
on LDC for thumb cortex-m0plus.

MKL25Z.d
line 5243:
uint32_t SIM_SOPT2_TPMSRC(uint32_t x)  {return ((x << 
SIM_SOPT2_TPMSRC_SHIFT) & SIM_SOPT2_TPMSRC_MASK);}

start.d
line 28:     int value = SIM_SOPT2_TPMSRC(1);
0x0000046E 2001      MOVS     r0,#0x01
0x00000470 9004      STR      r0,[sp,#0x10]
0x00000472 F000F8ED  BL.W     MKL25Z4.SIM_SOPT2_TPMSRC 
(0x00000650) //branch to crap
0x00000476 9005      STR      r0,[sp,#0x14]
...
0x00000650 B082      DCW      0xB082 < the crap
0x00000652 4601      DCW      0x4601
0x00000654 9001      DCW      0x9001
0x00000656 0600      DCW      0x0600
0x00000658 2203      DCW      0x2203

Is this an error on ldc's part or do i need to do something more 
to get the correct result?

I compiled with:
ldc2.exe -output-o -march=thumb -mcpu=cortex-m0plus 
-mtriple=arm-linux -g -c main.d start.d MKL25Z4.d
and linked with:
arm-unknown-linux-gnueabi-ld.exe -T mkl25z4.ld --gc-sections  
start.o MKL25Z4.o main.o  -o ldoutput.elf


And yes there is a little bit of information missing i've 
uploaded some files here.

https://github.com/taylorh140/DLANG_FRDM_KL25Z

I'm just trying to get more comfortable with working on 
microcontrollers with d. The good news is that I got a simple 
example running. An led blinking three colors!  I would like 
advice on the best way to handle direct interaction with 
registers, but maybe that's best for another post.


More information about the digitalmars-d-ldc mailing list