Index: kernel/arch/amd64/src/boot/multiboot.S
===================================================================
--- kernel/arch/amd64/src/boot/multiboot.S	(revision e98f1c3ecac2f8a34dd84930fa2b4ffe371c67ac)
+++ kernel/arch/amd64/src/boot/multiboot.S	(revision d776329b69ef4b29a8601fe5affe7faa8c58b51d)
@@ -430,10 +430,21 @@
 	movl multiboot_eax, %edi
 	movl multiboot_ebx, %esi
+	
+#ifdef MEMORY_MODEL_large
+	movabsq $amd64_pre_main, %rax
+	callq *%rax
+#else
 	callq amd64_pre_main
-
+#endif
+	
 	long_status $status_main
 	
 	/* Call main_bsp() */
-	callq main_bsp 
+#ifdef MEMORY_MODEL_large
+	movabsq $main_bsp, %rax
+	callq *%rax
+#else
+	callq main_bsp
+#endif
 	
 	/* Not reached */
@@ -622,4 +633,5 @@
 	ptl2gen 512 7
 
+#ifdef MEMORY_MODEL_kernel
 .align 4096
 ptl_1:
@@ -638,5 +650,4 @@
 	.quad ptl_2_1g + (PTL_WRITABLE | PTL_PRESENT)
 
-
 .align 4096
 SYMBOL(ptl_0)
@@ -644,4 +655,27 @@
 	.fill 510, 8, 0
 	.quad ptl_1 + (PTL_WRITABLE | PTL_PRESENT)
+#endif
+
+#ifdef MEMORY_MODEL_large
+.align 4096
+ptl_1:
+	/* Identity mapping for [0; 8G) */
+	.quad ptl_2_0g + (PTL_WRITABLE | PTL_PRESENT)
+	.quad ptl_2_1g + (PTL_WRITABLE | PTL_PRESENT)
+	.quad ptl_2_2g + (PTL_WRITABLE | PTL_PRESENT)
+	.quad ptl_2_3g + (PTL_WRITABLE | PTL_PRESENT)
+	.quad ptl_2_4g + (PTL_WRITABLE | PTL_PRESENT)
+	.quad ptl_2_5g + (PTL_WRITABLE | PTL_PRESENT)
+	.quad ptl_2_6g + (PTL_WRITABLE | PTL_PRESENT)
+	.quad ptl_2_7g + (PTL_WRITABLE | PTL_PRESENT)
+	.fill 504, 8, 0
+
+.align 4096
+SYMBOL(ptl_0)
+	.quad ptl_1 + (PTL_WRITABLE | PTL_PRESENT)
+	.fill 255, 8, 0
+	.quad ptl_1 + (PTL_WRITABLE | PTL_PRESENT)
+	.fill 255, 8, 0
+#endif
 
 .section K_DATA_START, "aw", @progbits
Index: kernel/arch/amd64/src/boot/multiboot2.S
===================================================================
--- kernel/arch/amd64/src/boot/multiboot2.S	(revision e98f1c3ecac2f8a34dd84930fa2b4ffe371c67ac)
+++ kernel/arch/amd64/src/boot/multiboot2.S	(revision d776329b69ef4b29a8601fe5affe7faa8c58b51d)
@@ -253,8 +253,19 @@
 	movl multiboot_eax, %edi
 	movl multiboot_ebx, %esi
-	callq amd64_pre_main 
+	
+#ifdef MEMORY_MODEL_large
+	movabsq $amd64_pre_main, %rax
+	callq *%rax
+#else
+	callq amd64_pre_main
+#endif
 	
 	/* Call main_bsp() */
-	callq main_bsp 
+#ifdef MEMORY_MODEL_large
+	movabsq $main_bsp, %rax
+	callq *%rax
+#else
+	callq main_bsp
+#endif
 	
 	/* Not reached */
Index: kernel/arch/amd64/src/context.S
===================================================================
--- kernel/arch/amd64/src/context.S	(revision e98f1c3ecac2f8a34dd84930fa2b4ffe371c67ac)
+++ kernel/arch/amd64/src/context.S	(revision d776329b69ef4b29a8601fe5affe7faa8c58b51d)
@@ -50,6 +50,11 @@
 	movq %r14, CONTEXT_OFFSET_R14(%rdi)
 	movq %r15, CONTEXT_OFFSET_R15(%rdi)
-
+	
+#ifdef MEMORY_MODEL_large
+	movabsq $vreg_ptr, %rsi
+	movq (%rsi), %rsi
+#else
 	movq vreg_ptr, %rsi
+#endif
 	movq %fs:VREG_TP(%rsi), %rsi
 	movq %rsi, CONTEXT_OFFSET_TP(%rdi)
@@ -79,6 +84,11 @@
 	movq %rdx, (%rsp)
 	
-	movq CONTEXT_OFFSET_TP(%rdi), %rcx 
+	movq CONTEXT_OFFSET_TP(%rdi), %rcx
+#ifdef MEMORY_MODEL_large
+	movabsq $vreg_ptr, %rsi
+	movq (%rsi), %rsi
+#else
 	movq vreg_ptr, %rsi
+#endif
 	movq %rcx, %fs:VREG_TP(%rsi)
 	
