Index: kernel/arch/ia64/include/faddr.h
===================================================================
--- kernel/arch/ia64/include/faddr.h	(revision a71c158ef82122abfeef92f86344709bbad55d17)
+++ kernel/arch/ia64/include/faddr.h	(revision ff211d250373e7bc4e7c6a89838a8a7a4dea9e8f)
@@ -27,5 +27,5 @@
  */
 
-/** @addtogroup ia64	
+/** @addtogroup ia64
  * @{
  */
@@ -38,13 +38,13 @@
 #include <arch/types.h>
 
-/** 
+/**
  *
  * Calculate absolute address of function
  * referenced by fptr pointer.
  *
- * @param f Function pointer.
+ * @param fptr Function pointer.
  *
  */
-#define FADDR(f)	 (*((uintptr_t *)(f)));
+#define FADDR(fptr)  (((fncptr_t *) (fptr))->fnc)
 
 #endif
Index: kernel/arch/ia64/include/types.h
===================================================================
--- kernel/arch/ia64/include/types.h	(revision a71c158ef82122abfeef92f86344709bbad55d17)
+++ kernel/arch/ia64/include/types.h	(revision ff211d250373e7bc4e7c6a89838a8a7a4dea9e8f)
@@ -67,5 +67,5 @@
 	unative_t fnc;
 	unative_t gp;
-} fncptr_t;
+} __attribute__((may_alias)) fncptr_t;
 
 #define PRIp "lx"	/**< Format for uintptr_t. */
Index: kernel/arch/ia64/src/cpu/cpu.c
===================================================================
--- kernel/arch/ia64/src/cpu/cpu.c	(revision a71c158ef82122abfeef92f86344709bbad55d17)
+++ kernel/arch/ia64/src/cpu/cpu.c	(revision ff211d250373e7bc4e7c6a89838a8a7a4dea9e8f)
@@ -54,9 +54,9 @@
 	char vendor[2 * sizeof(uint64_t) + 1];
 	
-	*((uint64_t *) &vendor[0 * sizeof(uint64_t)]) = CPU->arch.cpuid0;
-	*((uint64_t *) &vendor[1 * sizeof(uint64_t)]) = CPU->arch.cpuid1;
+	memcpy(vendor, &CPU->arch.cpuid0, 8);
+	memcpy(vendor + 8, &CPU->arch.cpuid1, 8);
 	vendor[sizeof(vendor) - 1] = 0;
 	
-	switch(m->arch.cpuid3.family) {
+	switch (m->arch.cpuid3.family) {
 	case FAMILY_ITANIUM:
 		family_str = "Itanium";
