diff --git a/libMEDSannotation/include/MEDS_Register.hpp b/libMEDSannotation/include/MEDS_Register.hpp
index 5452489f0f405e89f0a15c15f2c2d4e58f3f292b..6e57372cd8ffb4bf2f9f4318af18fc77adbe1402 100644
--- a/libMEDSannotation/include/MEDS_Register.hpp
+++ b/libMEDSannotation/include/MEDS_Register.hpp
@@ -8,7 +8,7 @@ namespace MEDS_Annotation
 
 class Register {
 public:
-  enum RegisterName { UNKNOWN, EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, AX, BX, CX, DX, BP, SP, SI, DI, AH, BH, CH, DH, AL, BL, CL, DL };
+  enum RegisterName { UNKNOWN, EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP, AX, BX, CX, DX, BP, SP, SI, DI, AH, BH, CH, DH, AL, BL, CL, DL, RAX, RBX, RCX, RDX, RBP, RSP, RSI, RDI, R8, R9, R10, R11, R12, R13, R14, R15, R8D, R9D, R10D, R11D, R12D, R13D, R14D, R15D, R8W, R9W, R10W, R11W, R12W, R13W, R14W, R15W, SIL, DIL, BPL, SPL, R8B, R9B, R10B, R11B, R12B, R13B, R14B, R15B };
   static RegisterName getRegister(std::string);
   static RegisterName getRegister(char *str);
   static bool is32bit(RegisterName);
diff --git a/libtransform/src/transform.cpp b/libtransform/src/transform.cpp
index a744d63d772d5d2d0eb3acbb5c6f0d839438b270..f00cda0de4df59b6592b6e1a1b2eca782fda7407 100644
--- a/libtransform/src/transform.cpp
+++ b/libtransform/src/transform.cpp
@@ -83,43 +83,80 @@ void Transform::addPushRegister(Instruction_t *p_instr, Register::RegisterName p
 	string dataBits;
 	dataBits.resize(1);
 
-	if (p_reg == Register::EAX)
+	if (p_reg == Register::EAX || p_reg == Register::RAX)
 	{
 		dataBits[0] = 0x50; 
 	} 
-	else if (p_reg == Register::EBX)
+	else if (p_reg == Register::EBX || p_reg == Register::RBX)
 	{
 		dataBits[0] = 0x53; 
 	} 
-	else if (p_reg == Register::ECX)
+	else if (p_reg == Register::ECX || p_reg == Register::RCX)
 	{
 		dataBits[0] = 0x51; 
 	}
-	else if (p_reg == Register::EDX)
+	else if (p_reg == Register::EDX || p_reg == Register::RDX)
 	{
 		dataBits[0] = 0x52; 
 	}
-	else if (p_reg == Register::ESI)
+	else if (p_reg == Register::ESI || p_reg == Register::RSI)
 	{
 		dataBits[0] = 0x56; 
 	}
-	else if (p_reg == Register::EDI)
+	else if (p_reg == Register::EDI || p_reg == Register::RDI)
 	{
 		dataBits[0] = 0x57; 
 	}
-	else if (p_reg == Register::EBP)
+	else if (p_reg == Register::EBP || p_reg == Register::RBP)
 	{
 		dataBits[0] = 0x55; 
 	}
-	else if (p_reg == Register::ESP)
+	else if (p_reg == Register::ESP || p_reg == Register::RSP)
 	{
 		dataBits[0] = 0x54; 
 	}
 	else
 	{
-		cerr << "Transform::addPushRegister: unhandled register: " << p_reg << endl;
-		assert(0);
-		return;
+		dataBits.resize(2);
+		dataBits[0] = 0x41;
+		if (p_reg == Register::R8)
+		{
+			dataBits[1] = 0x50;
+		} 
+		else if (p_reg == Register::R9)
+		{
+			dataBits[1] = 0x51;
+		} 
+		else if (p_reg == Register::R10)
+		{
+			dataBits[1] = 0x52;
+		} 
+		else if (p_reg == Register::R11)
+		{
+			dataBits[1] = 0x53;
+		} 
+		else if (p_reg == Register::R12)
+		{
+			dataBits[1] = 0x54;
+		} 
+		else if (p_reg == Register::R13)
+		{
+			dataBits[1] = 0x55;
+		} 
+		else if (p_reg == Register::R14)
+		{
+			dataBits[1] = 0x56;
+		} 
+		else if (p_reg == Register::R15)
+		{
+			dataBits[1] = 0x57;
+		}
+		else
+		{
+			cerr << "Transform::addPushRegister: unhandled register: " << p_reg << endl;
+			assert(0);
+			return;
+		}
 	}
 
 	addInstruction(p_instr, dataBits, p_fallThrough, NULL);
@@ -130,43 +167,80 @@ void Transform::addPopRegister(Instruction_t *p_instr, Register::RegisterName p_
 	string dataBits;
 	dataBits.resize(1);
 
-	if (p_reg == Register::EAX)
+	if (p_reg == Register::EAX || p_reg == Register::RAX)
 	{
 		dataBits[0] = 0x58; 
 	} 
-	else if (p_reg == Register::EBX)
+	else if (p_reg == Register::EBX || p_reg == Register::RBX)
 	{
 		dataBits[0] = 0x5b; 
 	} 
-	else if (p_reg == Register::ECX)
+	else if (p_reg == Register::ECX || p_reg == Register::RCX)
 	{
 		dataBits[0] = 0x59; 
 	}
-	else if (p_reg == Register::EDX)
+	else if (p_reg == Register::EDX || p_reg == Register::RDX)
 	{
 		dataBits[0] = 0x5a; 
 	}
-	else if (p_reg == Register::ESI)
+	else if (p_reg == Register::ESI || p_reg == Register::RSI)
 	{
 		dataBits[0] = 0x5e; 
 	}
-	else if (p_reg == Register::EDI)
+	else if (p_reg == Register::EDI || p_reg == Register::RDI)
 	{
 		dataBits[0] = 0x5f; 
 	}
-	else if (p_reg == Register::EBP)
+	else if (p_reg == Register::EBP || p_reg == Register::RBP)
 	{
 		dataBits[0] = 0x5d; 
 	}
-	else if (p_reg == Register::ESP)
+	else if (p_reg == Register::ESP || p_reg == Register::RSP)
 	{
 		dataBits[0] = 0x5c; 
 	}
 	else
 	{
-		cerr << "Transform::addPopRegister: unhandled register";
-		assert(0);
-		return;
+		dataBits.resize(2);
+		dataBits[0] = 0x41;
+		if (p_reg == Register::R8)
+		{
+			dataBits[1] = 0x58;
+		} 
+		else if (p_reg == Register::R9)
+		{
+			dataBits[1] = 0x59;
+		} 
+		else if (p_reg == Register::R10)
+		{
+			dataBits[1] = 0x5a;
+		} 
+		else if (p_reg == Register::R11)
+		{
+			dataBits[1] = 0x5b;
+		} 
+		else if (p_reg == Register::R12)
+		{
+			dataBits[1] = 0x5c;
+		} 
+		else if (p_reg == Register::R13)
+		{
+			dataBits[1] = 0x5d;
+		} 
+		else if (p_reg == Register::R14)
+		{
+			dataBits[1] = 0x5e;
+		} 
+		else if (p_reg == Register::R15)
+		{
+			dataBits[1] = 0x5f;
+		}
+		else
+		{
+			cerr << "Transform::addPopRegister: unhandled register";
+			assert(0);
+			return;
+		}
 	}
 
 	addInstruction(p_instr, dataBits, p_fallThrough, NULL);