Thank you MArtin Kovar!
The compile err is disappeared. But i see the disassemble language, i find that it's not what i hope to(the red part)
i wander do i write wrong? If yes, what is the right way? Thank you very much!
unsigned int reg0, reg1;
/* MSR |= 0x2000 ---> This is what i hope */
__asm__("mfmsr %0 \n\t" : "=kregs"(reg0));
8: 7c e0 00 a6 mfmsr r7
c: 02 71 se_mtar r9,r7
e: 55 3f 00 08 e_stw r9,8(r31)
__asm__("e_lis %0,0x0000 \n\t" : "=kregs"(reg1));
12: 70 e0 e0 00 e_lis r7,0
16: 02 71 se_mtar r9,r7
18: 55 3f 00 0c e_stw r9,12(r31)
__asm__("e_add16i %0, %0,0x2000 \n\t" : "=kregs"(reg1));
1c: 1c e7 20 00 e_add16i r7,r7,8192
20: 02 71 se_mtar r9,r7
22: 55 3f 00 0c e_stw r9,12(r31)
__asm__("se_or %0, %1 \n\t" : "=kregs"(reg0) : "kregs"(reg1)); /* not reg0 |= reg1 ? */
26: 51 3f 00 0c e_lwz r9,12(r31)
2a: 03 17 se_mfar r7,r9
2c: 44 77 se_or r7,r7
2e: 02 71 se_mtar r9,r7
30: 55 3f 00 08 e_stw r9,8(r31)
__asm__("mtmsr %0 \n\t" : "=kregs" (reg0));
34: 7c e0 01 24 mtmsr r7
38: 02 71 se_mtar r9,r7
3a: 55 3f 00 08 e_stw r9,8(r31)