diff --git a/sections/cper-section-generic.c b/sections/cper-section-generic.c
index c83679c..2745b06 100644
--- a/sections/cper-section-generic.c
+++ b/sections/cper-section-generic.c
@@ -18,20 +18,7 @@
     json_object* section_ir = json_object_new_object();
 
     //Validation bits.
-    json_object* validation = json_object_new_object();
-    json_object_object_add(validation, "processorTypeValid", json_object_new_boolean(section_generic->ValidFields >> 63));
-    json_object_object_add(validation, "processorISAValid", json_object_new_boolean((section_generic->ValidFields >> 62) & 0x1));
-    json_object_object_add(validation, "processorErrorTypeValid", json_object_new_boolean((section_generic->ValidFields >> 61) & 0x1));
-    json_object_object_add(validation, "operationValid", json_object_new_boolean((section_generic->ValidFields >> 60) & 0x1));
-    json_object_object_add(validation, "flagsValid", json_object_new_boolean((section_generic->ValidFields >> 59) & 0x1));
-    json_object_object_add(validation, "levelValid", json_object_new_boolean((section_generic->ValidFields >> 58) & 0x1));
-    json_object_object_add(validation, "cpuVersionValid", json_object_new_boolean((section_generic->ValidFields >> 57) & 0x1));
-    json_object_object_add(validation, "cpuBrandInfoValid", json_object_new_boolean((section_generic->ValidFields >> 56) & 0x1));
-    json_object_object_add(validation, "cpuIDValid", json_object_new_boolean((section_generic->ValidFields >> 55) & 0x1));
-    json_object_object_add(validation, "targetAddressValid", json_object_new_boolean((section_generic->ValidFields >> 54) & 0x1));
-    json_object_object_add(validation, "requesterIDValid", json_object_new_boolean((section_generic->ValidFields >> 53) & 0x1));
-    json_object_object_add(validation, "responderIDValid", json_object_new_boolean((section_generic->ValidFields >> 52) & 0x1));
-    json_object_object_add(validation, "instructionIPValid", json_object_new_boolean((section_generic->ValidFields >> 51) & 0x1));
+    json_object* validation = bitfield64_to_ir(section_generic->ValidFields, 13, GENERIC_VALIDATION_BITFIELD_NAMES);
     json_object_object_add(section_ir, "validationBits", validation);
 
     //Processor type, with human readable name if possible.
@@ -67,11 +54,7 @@
     json_object_object_add(section_ir, "operation", operation);
 
     //Flags, additional information about the error.
-    json_object* flags = json_object_new_object();
-    json_object_object_add(flags, "restartable", json_object_new_boolean(section_generic->Flags >> 7));
-    json_object_object_add(flags, "preciseIP", json_object_new_boolean((section_generic->Flags >> 6) & 0b1));
-    json_object_object_add(flags, "overflow", json_object_new_boolean((section_generic->Flags >> 5) & 0b1));
-    json_object_object_add(flags, "corrected", json_object_new_boolean((section_generic->Flags >> 4) & 0b1));
+    json_object* flags = bitfield8_to_ir(section_generic->Flags, 4, GENERIC_FLAGS_BITFIELD_NAMES);
     json_object_object_add(section_ir, "flags", flags);
 
     //The level of the error.
diff --git a/sections/cper-section-generic.h b/sections/cper-section-generic.h
index a5fb930..2b548b6 100644
--- a/sections/cper-section-generic.h
+++ b/sections/cper-section-generic.h
@@ -1,6 +1,9 @@
 #ifndef CPER_SECTION_GENERIC_H
 #define CPER_SECTION_GENERIC_H
 
+#include "json.h"
+#include "../edk/Cper.h"
+
 #define GENERIC_PROC_TYPES_KEYS (int []){0, 1, 2}
 #define GENERIC_PROC_TYPES_VALUES (const char*[]){"IA32/X64", "IA64", "ARM"}
 #define GENERIC_ISA_TYPES_KEYS (int []){0, 1, 2, 3, 4}
@@ -9,6 +12,12 @@
 #define GENERIC_ERROR_TYPES_VALUES (const char*[]){"Unknown", "Cache Error", "TLB Error", "Bus Error", "Micro-Architectural Error"}
 #define GENERIC_OPERATION_TYPES_KEYS (int []){0, 1, 2, 3}
 #define GENERIC_OPERATION_TYPES_VALUES (const char*[]){"Unknown or generic", "Data Read", "Data Write", "Instruction Execution"}
+#define GENERIC_VALIDATION_BITFIELD_NAMES (const char*[]) \
+    {"processorTypeValid", "processorISAValid", "processorErrorTypeValid", "operationValid", "flagsValid" \
+    "levelValid", "cpuVersionValid", "cpuBrandInfoValid", "cpuIDValid", "targetAddressValid", "requesterIDValid" \
+    "responderIDValid", "instructionIPValid"}
+#define GENERIC_FLAGS_BITFIELD_NAMES (const char*[]) \
+    {"restartable", "preciseIP", "overflow", "corrected"}
 
 json_object* cper_section_generic_to_ir(void* section, EFI_ERROR_SECTION_DESCRIPTOR* descriptor);
 
diff --git a/sections/cper-section-ia32x64.c b/sections/cper-section-ia32x64.c
new file mode 100644
index 0000000..187446a
--- /dev/null
+++ b/sections/cper-section-ia32x64.c
@@ -0,0 +1,337 @@
+/**
+ * Describes functions for converting IA32/x64 CPER sections from binary and JSON format
+ * into an intermediate format.
+ * 
+ * Author: Lawrence.Tang@arm.com
+ **/
+
+#include <stdio.h>
+#include "json.h"
+#include "../edk/Cper.h"
+#include "../cper-utils.h"
+#include "cper-section-ia32x64.h"
+
+//Private pre-definitions.
+json_object* cper_ia32x64_processor_error_info_to_ir(EFI_IA32_X64_PROCESS_ERROR_INFO* error_info);
+json_object* cper_ia32x64_cache_tlb_check_to_ir(EFI_IA32_X64_CACHE_CHECK_INFO* cache_tlb_check);
+json_object* cper_ia32x64_bus_check_to_ir(EFI_IA32_X64_BUS_CHECK_INFO* bus_check);
+json_object* cper_ia32x64_ms_check_to_ir(EFI_IA32_X64_MS_CHECK_INFO* ms_check);
+json_object* cper_ia32x64_processor_context_info_to_ir(EFI_IA32_X64_PROCESSOR_CONTEXT_INFO* context_info, void** cur_pos);
+json_object* cper_ia32x64_register_32bit_to_ir(EFI_CONTEXT_IA32_REGISTER_STATE* registers);
+json_object* cper_ia32x64_register_64bit_to_ir(EFI_CONTEXT_X64_REGISTER_STATE* registers);
+
+//Converts the IA32/x64 error section described in the given descriptor into intermediate format.
+json_object* cper_section_ia32x64_to_ir(void* section, EFI_ERROR_SECTION_DESCRIPTOR* descriptor)
+{
+    EFI_IA32_X64_PROCESSOR_ERROR_RECORD* record = (EFI_IA32_X64_PROCESSOR_ERROR_RECORD*)section;
+    json_object* record_ir = json_object_new_object();
+
+    //Flags.
+    json_object* flags = json_object_new_object();
+    json_object_object_add(flags, "localAPICIDValid", json_object_new_boolean(record->ValidFields >> 31));
+    json_object_object_add(flags, "cpuIDInfoValid", json_object_new_boolean((record->ValidFields >> 30) & 0b1));
+    int processor_error_info_num = (record->ValidFields >> 29) & 0b111111;
+    json_object_object_add(flags, "processorErrorInfoNum", json_object_new_int(processor_error_info_num));
+    int processor_context_info_num = (record->ValidFields >> 23) & 0b111111;
+    json_object_object_add(flags, "processorContextInfoNum", json_object_new_int(processor_context_info_num));
+    json_object_object_add(record_ir, "flags", flags);
+
+    //APIC ID.
+    json_object_object_add(record_ir, "localAPICID", json_object_new_uint64(record->ApicId));
+
+    //CPU ID information (todo, see generic).
+    //...
+
+    //Processor error information, of the amount described above.
+    EFI_IA32_X64_PROCESS_ERROR_INFO* current_error_info = (EFI_IA32_X64_PROCESS_ERROR_INFO*)(record + 1);
+    json_object* error_info_array = json_object_new_array();
+    for (int i=0; i<processor_error_info_num; i++) 
+    {
+        json_object_array_add(error_info_array, cper_ia32x64_processor_error_info_to_ir(current_error_info));
+        current_error_info++;
+    }
+    json_object_object_add(record_ir, "processorErrorInfo", error_info_array);
+
+    //Processor context information, of the amount described above.
+    EFI_IA32_X64_PROCESSOR_CONTEXT_INFO* current_context_info = (EFI_IA32_X64_PROCESSOR_CONTEXT_INFO*)(current_error_info + 1);
+    json_object* context_info_array = json_object_new_array();
+    for (int i=0; i<processor_context_info_num; i++) 
+    {
+        json_object_array_add(context_info_array, cper_ia32x64_processor_context_info_to_ir(current_context_info, (void**)&current_context_info));
+        //The context array is a non-fixed size, pointer is shifted within the above function.
+    }
+    json_object_object_add(record_ir, "processorContextInfo", context_info_array);
+
+    return record_ir;
+}
+
+//Converts a single IA32/x64 processor error info block into JSON IR format.
+json_object* cper_ia32x64_processor_error_info_to_ir(EFI_IA32_X64_PROCESS_ERROR_INFO* error_info)
+{
+    json_object* error_info_ir = json_object_new_object();
+
+    //Error structure type (as GUID).
+    char error_type[GUID_STRING_LENGTH];
+    guid_to_string(error_type, &error_info->ErrorType);
+    json_object_object_add(error_info_ir, "type", json_object_new_string(error_type));
+
+    //Validation bits.
+    json_object* validation = bitfield64_to_ir(error_info->ValidFields, 5, IA32X64_PROCESSOR_ERROR_VALID_BITFIELD_NAMES);
+    json_object_object_add(error_info_ir, "validationBits", validation);
+
+    //Add the check information on a per-structure basis.
+    //Cache and TLB check information are identical, so can be equated.
+    json_object* checkInformation = NULL;
+    if (guid_equal(&error_info->ErrorType, &gEfiIa32x64ErrorTypeCacheCheckGuid)
+        || guid_equal(&error_info->ErrorType, &gEfiIa32x64ErrorTypeTlbCheckGuid))
+    {
+        checkInformation = cper_ia32x64_cache_tlb_check_to_ir((EFI_IA32_X64_CACHE_CHECK_INFO*)&error_info->CheckInfo);
+    }
+    else if (guid_equal(&error_info->ErrorType, &gEfiIa32x64ErrorTypeBusCheckGuid))
+        checkInformation = cper_ia32x64_bus_check_to_ir((EFI_IA32_X64_BUS_CHECK_INFO*)&error_info->CheckInfo);
+    else if (guid_equal(&error_info->ErrorType, &gEfiIa32x64ErrorTypeMsCheckGuid))
+        checkInformation = cper_ia32x64_ms_check_to_ir((EFI_IA32_X64_MS_CHECK_INFO*)&error_info->CheckInfo);
+    json_object_object_add(error_info_ir, "checkInfo", checkInformation);
+
+    //Target, requestor, and responder identifiers.
+    json_object_object_add(error_info_ir, "targetIdentifier", json_object_new_uint64(error_info->TargetId));
+    json_object_object_add(error_info_ir, "requestorIdentifier", json_object_new_uint64(error_info->RequestorId));
+    json_object_object_add(error_info_ir, "responderIdentifier", json_object_new_uint64(error_info->ResponderId));
+    json_object_object_add(error_info_ir, "instructionPointer", json_object_new_uint64(error_info->InstructionIP));
+
+    return error_info_ir;
+}
+
+//Converts a single IA32/x64 cache or TLB check check info block into JSON IR format.
+json_object* cper_ia32x64_cache_tlb_check_to_ir(EFI_IA32_X64_CACHE_CHECK_INFO* cache_tlb_check)
+{
+    json_object* cache_tlb_check_ir = json_object_new_object();
+
+    //Validation bits.
+    json_object* validation = bitfield_to_ir(cache_tlb_check->ValidFields, 8, IA32X64_CHECK_INFO_VALID_BITFIELD_NAMES);
+    json_object_object_add(cache_tlb_check_ir, "validationBits", validation);
+
+    //Transaction type.
+    json_object* transaction_type = integer_to_readable_pair(cache_tlb_check->TransactionType, 3,
+        IA32X64_CHECK_INFO_TRANSACTION_TYPES_KEYS,
+        IA32X64_CHECK_INFO_TRANSACTION_TYPES_VALUES,
+        "Unknown (Reserved)");
+    json_object_object_add(cache_tlb_check_ir, "transactionType", transaction_type);
+
+    //Operation.
+    json_object* operation = integer_to_readable_pair(cache_tlb_check->Operation, 9,
+        IA32X64_CHECK_INFO_OPERATION_TYPES_KEYS,
+        IA32X64_CHECK_INFO_OPERATION_TYPES_VALUES,
+        "Unknown (Reserved)");
+    json_object_object_add(cache_tlb_check_ir, "operation", operation);
+
+    //Affected cache/TLB level.
+    json_object_object_add(cache_tlb_check_ir, "level", json_object_new_uint64(cache_tlb_check->Level));
+
+    //Miscellaneous boolean fields.
+    json_object_object_add(cache_tlb_check_ir, "processorContextCorrupt", json_object_new_boolean(cache_tlb_check->ContextCorrupt));
+    json_object_object_add(cache_tlb_check_ir, "uncorrected", json_object_new_boolean(cache_tlb_check->ErrorUncorrected));
+    json_object_object_add(cache_tlb_check_ir, "preciseIP", json_object_new_boolean(cache_tlb_check->PreciseIp));
+    json_object_object_add(cache_tlb_check_ir, "restartableIP", json_object_new_boolean(cache_tlb_check->RestartableIp));
+    json_object_object_add(cache_tlb_check_ir, "overflow", json_object_new_boolean(cache_tlb_check->Overflow));
+
+    return cache_tlb_check_ir;
+}
+
+//Converts a single IA32/x64 bus check check info block into JSON IR format.
+json_object* cper_ia32x64_bus_check_to_ir(EFI_IA32_X64_BUS_CHECK_INFO* bus_check)
+{ 
+    json_object* bus_check_ir = json_object_new_object();
+
+    //Validation bits.
+    json_object* validation = bitfield_to_ir(bus_check->ValidFields, 11, IA32X64_CHECK_INFO_VALID_BITFIELD_NAMES);
+    json_object_object_add(bus_check_ir, "validationBits", validation);
+
+    //Transaction type.
+    json_object* transaction_type = integer_to_readable_pair(bus_check->TransactionType, 3,
+        IA32X64_CHECK_INFO_TRANSACTION_TYPES_KEYS,
+        IA32X64_CHECK_INFO_TRANSACTION_TYPES_VALUES,
+        "Unknown (Reserved)");
+    json_object_object_add(bus_check_ir, "transactionType", transaction_type);
+
+    //Operation.
+    json_object* operation = integer_to_readable_pair(bus_check->Operation, 9,
+        IA32X64_CHECK_INFO_OPERATION_TYPES_KEYS,
+        IA32X64_CHECK_INFO_OPERATION_TYPES_VALUES,
+        "Unknown (Reserved)");
+    json_object_object_add(bus_check_ir, "operation", operation);
+
+    //Affected bus level.
+    json_object_object_add(bus_check_ir, "level", json_object_new_uint64(bus_check->Level));
+
+    //Miscellaneous boolean fields.
+    json_object_object_add(bus_check_ir, "processorContextCorrupt", json_object_new_boolean(bus_check->ContextCorrupt));
+    json_object_object_add(bus_check_ir, "uncorrected", json_object_new_boolean(bus_check->ErrorUncorrected));
+    json_object_object_add(bus_check_ir, "preciseIP", json_object_new_boolean(bus_check->PreciseIp));
+    json_object_object_add(bus_check_ir, "restartableIP", json_object_new_boolean(bus_check->RestartableIp));
+    json_object_object_add(bus_check_ir, "overflow", json_object_new_boolean(bus_check->Overflow));
+    json_object_object_add(bus_check_ir, "timedOut", json_object_new_boolean(bus_check->TimeOut));
+
+    //Participation type.
+    json_object* participation_type = integer_to_readable_pair(bus_check->ParticipationType, 4,
+        IA32X64_BUS_CHECK_INFO_PARTICIPATION_TYPES_KEYS,
+        IA32X64_BUS_CHECK_INFO_PARTICIPATION_TYPES_VALUES,
+        "Unknown");
+    json_object_object_add(bus_check_ir, "participationType", participation_type);
+
+    //Address space.
+    json_object* address_space = integer_to_readable_pair(bus_check->AddressSpace, 4,
+        IA32X64_BUS_CHECK_INFO_ADDRESS_SPACE_TYPES_KEYS,
+        IA32X64_BUS_CHECK_INFO_ADDRESS_SPACE_TYPES_VALUES,
+        "Unknown");
+    json_object_object_add(bus_check_ir, "addressSpace", address_space);
+    
+    return bus_check_ir;
+}
+
+//Converts a single IA32/x64 MS check check info block into JSON IR format.
+json_object* cper_ia32x64_ms_check_to_ir(EFI_IA32_X64_MS_CHECK_INFO* ms_check)
+{
+    json_object* ms_check_ir = json_object_new_object();
+
+    //Validation bits.
+    json_object* validation = bitfield_to_ir(ms_check->ValidFields, 6, IA32X64_CHECK_INFO_VALID_BITFIELD_NAMES);
+    json_object_object_add(ms_check_ir, "validationBits", validation);
+
+    //Error type (operation that caused the error).
+    json_object* error_type = integer_to_readable_pair(ms_check->ErrorType, 4,
+        IA32X64_MS_CHECK_INFO_ERROR_TYPES_KEYS,
+        IA32X64_MS_CHECK_INFO_ERROR_TYPES_VALUES,
+        "Unknown (Processor Specific)");
+    json_object_object_add(ms_check_ir, "errorType", error_type);
+    
+    //Miscellaneous fields.
+    json_object_object_add(ms_check_ir, "processorContextCorrupt", json_object_new_boolean(ms_check->ContextCorrupt));
+    json_object_object_add(ms_check_ir, "uncorrected", json_object_new_boolean(ms_check->ErrorUncorrected));
+    json_object_object_add(ms_check_ir, "preciseIP", json_object_new_boolean(ms_check->PreciseIp));
+    json_object_object_add(ms_check_ir, "restartableIP", json_object_new_boolean(ms_check->RestartableIp));
+    json_object_object_add(ms_check_ir, "overflow", json_object_new_boolean(ms_check->Overflow));
+
+    return ms_check_ir;
+}
+
+//Converts a single IA32/x64 processor context info entry into JSON IR format.
+json_object* cper_ia32x64_processor_context_info_to_ir(EFI_IA32_X64_PROCESSOR_CONTEXT_INFO* context_info, void** cur_pos)
+{
+    json_object* context_info_ir = json_object_new_object();
+
+    //Register context type.
+    json_object* context_type = integer_to_readable_pair(context_info->RegisterType, 8,
+        IA32X64_REGISTER_CONTEXT_TYPES_KEYS,
+        IA32X64_REGISTER_CONTEXT_TYPES_VALUES,
+        "Unknown (Reserved)");
+    json_object_object_add(context_info_ir, "registerContextType", context_type);
+
+    //Register array size, MSR and MM address.
+    json_object_object_add(context_info_ir, "registerArraySize", json_object_new_uint64(context_info->ArraySize));
+    json_object_object_add(context_info_ir, "msrAddress", json_object_new_uint64(context_info->MsrAddress));
+    json_object_object_add(context_info_ir, "mmRegisterAddress", json_object_new_uint64(context_info->MmRegisterAddress));
+
+    //Register array.
+    json_object* register_array = NULL;
+    if (context_info->RegisterType == 2) 
+    {
+        EFI_CONTEXT_IA32_REGISTER_STATE* register_state = (EFI_CONTEXT_IA32_REGISTER_STATE*)(context_info + 1);
+        register_array = cper_ia32x64_register_32bit_to_ir(register_state);
+        *cur_pos = (void*)(register_state + 1);
+    }
+    else if (context_info->RegisterType == 3) 
+    {
+        EFI_CONTEXT_X64_REGISTER_STATE* register_state = (EFI_CONTEXT_X64_REGISTER_STATE*)(context_info + 1);
+        register_array = cper_ia32x64_register_64bit_to_ir(register_state);
+        *cur_pos = (void*)(register_state + 1);
+    }
+    else 
+    {
+        //No parseable data, just shift the head to the next item.
+        //todo: Dump the unparseable data into JSON IR anyway
+        *cur_pos = (void*)(context_info + 1);
+        *cur_pos = (void*)(((char*)cur_pos) + context_info->ArraySize);
+    }
+    json_object_object_add(context_info_ir, "registerArray", register_array);
+
+    return context_info_ir;
+}
+
+//Converts a single CPER IA32 register state into JSON IR format.
+json_object* cper_ia32x64_register_32bit_to_ir(EFI_CONTEXT_IA32_REGISTER_STATE* registers)
+{
+    json_object* ia32_registers = json_object_new_object();
+    json_object_object_add(ia32_registers, "eax", json_object_new_int(registers->Eax));
+    json_object_object_add(ia32_registers, "ebx", json_object_new_int(registers->Ebx));
+    json_object_object_add(ia32_registers, "ecx", json_object_new_int(registers->Ecx));
+    json_object_object_add(ia32_registers, "edx", json_object_new_int(registers->Edx));
+    json_object_object_add(ia32_registers, "esi", json_object_new_int(registers->Esi));
+    json_object_object_add(ia32_registers, "edi", json_object_new_int(registers->Edi));
+    json_object_object_add(ia32_registers, "ebp", json_object_new_int(registers->Ebp));
+    json_object_object_add(ia32_registers, "esp", json_object_new_int(registers->Esp));
+    json_object_object_add(ia32_registers, "cs", json_object_new_int(registers->Cs));
+    json_object_object_add(ia32_registers, "ds", json_object_new_int(registers->Ds));
+    json_object_object_add(ia32_registers, "ss", json_object_new_int(registers->Ss));
+    json_object_object_add(ia32_registers, "es", json_object_new_int(registers->Es));
+    json_object_object_add(ia32_registers, "fs", json_object_new_int(registers->Fs));
+    json_object_object_add(ia32_registers, "gs", json_object_new_int(registers->Gs));
+    json_object_object_add(ia32_registers, "eflags", json_object_new_int(registers->Eflags));
+    json_object_object_add(ia32_registers, "eip", json_object_new_int(registers->Eip));
+    json_object_object_add(ia32_registers, "cr0", json_object_new_int(registers->Cr0));
+    json_object_object_add(ia32_registers, "cr1", json_object_new_int(registers->Cr1));
+    json_object_object_add(ia32_registers, "cr2", json_object_new_int(registers->Cr2));
+    json_object_object_add(ia32_registers, "cr3", json_object_new_int(registers->Cr3));
+    json_object_object_add(ia32_registers, "cr4", json_object_new_int(registers->Cr4));
+    json_object_object_add(ia32_registers, "gdtr", json_object_new_uint64((registers->Gdtr[0] << 16) + registers->Gdtr[1]));
+    json_object_object_add(ia32_registers, "idtr", json_object_new_uint64((registers->Idtr[0] << 16) + registers->Idtr[1]));
+    json_object_object_add(ia32_registers, "ldtr", json_object_new_int(registers->Ldtr));
+    json_object_object_add(ia32_registers, "tr", json_object_new_int(registers->Tr));
+
+    return ia32_registers;
+}
+
+//Converts a single CPER x64 register state into JSON IR format.
+json_object* cper_ia32x64_register_64bit_to_ir(EFI_CONTEXT_X64_REGISTER_STATE* registers)
+{
+    json_object* x64_registers = json_object_new_object();
+    json_object_object_add(x64_registers, "rax", json_object_new_uint64(registers->Rax));
+    json_object_object_add(x64_registers, "rbx", json_object_new_uint64(registers->Rbx));
+    json_object_object_add(x64_registers, "rcx", json_object_new_uint64(registers->Rcx));
+    json_object_object_add(x64_registers, "rdx", json_object_new_uint64(registers->Rdx));
+    json_object_object_add(x64_registers, "rsi", json_object_new_uint64(registers->Rsi));
+    json_object_object_add(x64_registers, "rdi", json_object_new_uint64(registers->Rdi));
+    json_object_object_add(x64_registers, "rbp", json_object_new_uint64(registers->Rbp));
+    json_object_object_add(x64_registers, "rsp", json_object_new_uint64(registers->Rsp));
+    json_object_object_add(x64_registers, "r8", json_object_new_uint64(registers->R8));
+    json_object_object_add(x64_registers, "r9", json_object_new_uint64(registers->R9));
+    json_object_object_add(x64_registers, "r10", json_object_new_uint64(registers->R10));
+    json_object_object_add(x64_registers, "r11", json_object_new_uint64(registers->R11));
+    json_object_object_add(x64_registers, "r12", json_object_new_uint64(registers->R12));
+    json_object_object_add(x64_registers, "r13", json_object_new_uint64(registers->R13));
+    json_object_object_add(x64_registers, "r14", json_object_new_uint64(registers->R14));
+    json_object_object_add(x64_registers, "r15", json_object_new_uint64(registers->R15));
+    json_object_object_add(x64_registers, "cs", json_object_new_int(registers->Cs));
+    json_object_object_add(x64_registers, "ds", json_object_new_int(registers->Ds));
+    json_object_object_add(x64_registers, "ss", json_object_new_int(registers->Ss));
+    json_object_object_add(x64_registers, "es", json_object_new_int(registers->Es));
+    json_object_object_add(x64_registers, "fs", json_object_new_int(registers->Fs));
+    json_object_object_add(x64_registers, "gs", json_object_new_int(registers->Gs));
+    json_object_object_add(x64_registers, "rflags", json_object_new_uint64(registers->Rflags));
+    json_object_object_add(x64_registers, "eip", json_object_new_uint64(registers->Rip));
+    json_object_object_add(x64_registers, "cr0", json_object_new_uint64(registers->Cr0));
+    json_object_object_add(x64_registers, "cr1", json_object_new_uint64(registers->Cr1));
+    json_object_object_add(x64_registers, "cr2", json_object_new_uint64(registers->Cr2));
+    json_object_object_add(x64_registers, "cr3", json_object_new_uint64(registers->Cr3));
+    json_object_object_add(x64_registers, "cr4", json_object_new_uint64(registers->Cr4));
+    //todo: Where is CR8? On the specification, not in the headers.
+    //json_object_object_add(x64_registers, "cr8", json_object_new_uint64(registers->));
+    json_object_object_add(x64_registers, "gdtr_0", json_object_new_uint64(registers->Gdtr[0]));
+    json_object_object_add(x64_registers, "gdtr_1", json_object_new_uint64(registers->Gdtr[1]));
+    json_object_object_add(x64_registers, "idtr_0", json_object_new_uint64(registers->Idtr[0]));
+    json_object_object_add(x64_registers, "idtr_1", json_object_new_uint64(registers->Idtr[1]));
+    json_object_object_add(x64_registers, "ldtr", json_object_new_int(registers->Ldtr));
+    json_object_object_add(x64_registers, "tr", json_object_new_int(registers->Tr));
+
+    return x64_registers;
+}
\ No newline at end of file
diff --git a/sections/cper-section-ia32x64.h b/sections/cper-section-ia32x64.h
new file mode 100644
index 0000000..81076d0
--- /dev/null
+++ b/sections/cper-section-ia32x64.h
@@ -0,0 +1,35 @@
+#ifndef CPER_SECTION_IA32X64_H
+#define CPER_SECTION_IA32X64_H
+
+#include "json.h"
+#include "../edk/Cper.h"
+
+#define IA32X64_PROCESSOR_ERROR_VALID_BITFIELD_NAMES (const char*[]) \
+    {"checkInfoValid", "targetAddressIdentifierValid", "requestorIdentifierValid", "responderIdentifierValid", \
+    "instructionPointerValid"}
+#define IA32X64_CHECK_INFO_VALID_BITFIELD_NAMES (const char*[]) \
+    {"transactionTypeValid", "operationValid", "levelValid", "processorContextCorruptValid", "uncorrectedValid" \
+    "preciseIPValid", "restartableIPValid", "overflowValid", "participationTypeValid", "timeOutValid" \
+    "addressSpaceValid"}
+#define IA32X64_CHECK_INFO_TRANSACTION_TYPES_KEYS (int []){0, 1, 2}
+#define IA32X64_CHECK_INFO_TRANSACTION_TYPES_VALUES (const char*[]){"Instruction", "Data Access", "Generic"}
+#define IA32X64_CHECK_INFO_OPERATION_TYPES_KEYS (int []){0, 1, 2, 3, 4, 5, 6, 7, 8}
+#define IA32X64_CHECK_INFO_OPERATION_TYPES_VALUES (const char*[]){"Generic Error", "Generic Read", "Generic Write" \
+    "Data Read", "Data Write", "Instruction Fetch", "Prefetch", "Eviction", "Snoop"}
+#define IA32X64_BUS_CHECK_INFO_PARTICIPATION_TYPES_KEYS (int []){0, 1, 2, 3}
+#define IA32X64_BUS_CHECK_INFO_PARTICIPATION_TYPES_VALUES (const char*[]){"Local processor originated request", \
+    "Local processor responded to request", "Local processor observed", "Generic"}
+#define IA32X64_BUS_CHECK_INFO_ADDRESS_SPACE_TYPES_KEYS (int []){0, 1, 2, 3}
+#define IA32X64_BUS_CHECK_INFO_ADDRESS_SPACE_TYPES_VALUES (const char*[]){"Memory Access", "Reserved", "I/O", \
+    "Other Transaction"}
+#define IA32X64_MS_CHECK_INFO_ERROR_TYPES_KEYS (int []){0, 1, 2, 3, 4, 5}
+#define IA32X64_MS_CHECK_INFO_ERROR_TYPES_VALUES (const char*[]){"No Error", "Unclassified", "Microcode ROM Parity Error", \
+    "External Error", "FRC Error", "Internal Unclassified"}
+#define IA32X64_REGISTER_CONTEXT_TYPES_KEYS (int []){0, 1, 2, 3, 4, 5, 6, 7}
+#define IA32X64_REGISTER_CONTEXT_TYPES_VALUES (const char*[]){"Unclassified Data", "MSR Registers", \
+    "32-bit Mode Execution Context", "64-bit Mode Execution Context", "FXSave Context", \
+    "32-bit Mode Debug Registers", "64-bit Mode Debug Registers", "Memory Mapper Registers"}
+
+json_object* cper_section_ia32x64_to_ir(void* section, EFI_ERROR_SECTION_DESCRIPTOR* descriptor);
+
+#endif
\ No newline at end of file
