I use the following function in my code with uVision 4.70

__asm void SetPOWCON(
	u16 u16POWCON)	// POWCON register value
{	
Z_PLL	EQU		0xFFFF0400	// PLL base address
R_NUM	EQU 	0x12345678	// Random Number for Dummy Multiplication

   LDR      r3,=R_NUM      // Load random number for multiplication
   LDR      r1,=Z_PLL      // Load base address of PLL / POWCON related MMRs
   MOV      r2,#1          // POWKEY0 = 1
   STR      r2,[r1,#4]
   STR      r0,[r1,#8]     // Set POWCON value
   MOV      r0,#0xf4       // POWKEY1 = 0xF4
   STR      r0,[r1,#0xc]
   UMLAL    r2,r0,r3,r1    
   BX       lr
}