diff --git a/Makefile b/Makefile
index 9f39365..2fe3c27 100644
--- a/Makefile
+++ b/Makefile
@@ -43,7 +43,7 @@
 
 
 CHECKPATCH := $(CURDIR)/third_party/linux/scripts/checkpatch.pl \
-	--ignore BRACES,SPDX_LICENSE_TAG,VOLATILE,SPLIT_STRING,AVOID_EXTERNS,USE_SPINLOCK_T,NEW_TYPEDEFS,INITIALISED_STATIC,FILE_PATH_CHANGES,EMBEDDED_FUNCTION_NAME,SINGLE_STATEMENT_DO_WHILE_MACRO,MACRO_WITH_FLOW_CONTROL --quiet
+	--ignore BRACES,SPDX_LICENSE_TAG,VOLATILE,SPLIT_STRING,AVOID_EXTERNS,USE_SPINLOCK_T,NEW_TYPEDEFS,INITIALISED_STATIC,FILE_PATH_CHANGES,EMBEDDED_FUNCTION_NAME,SINGLE_STATEMENT_DO_WHILE_MACRO,MACRO_WITH_FLOW_CONTROL,PREFER_PACKED,PREFER_ALIGNED --quiet
 
 # Specifies the grep pattern for ignoring specific files in checkpatch.
 # C++ headers, *.hh, are automatically excluded.
diff --git a/inc/vmapi/hf/spci.h b/inc/vmapi/hf/spci.h
index c7638ce..977c4a4 100644
--- a/inc/vmapi/hf/spci.h
+++ b/inc/vmapi/hf/spci.h
@@ -229,11 +229,10 @@
 	 * The base IPA of the constituent memory region, aligned to 4 kiB page
 	 * size granularity.
 	 */
-	uint64_t address;
+	uint32_t address_low;
+	uint32_t address_high;
 	/** The number of 4 kiB pages in the constituent memory region. */
 	uint32_t page_count;
-
-	uint32_t reserved;
 };
 
 struct spci_memory_region_attributes {
@@ -297,6 +296,23 @@
 	struct spci_memory_region_attributes attributes[];
 };
 
+static inline struct spci_memory_region_constituent
+spci_memory_region_constituent_init(uint64_t address, uint32_t pc)
+{
+	return (struct spci_memory_region_constituent){
+		.address_high = (uint32_t)(address >> 32),
+		.address_low = (uint32_t)address,
+		.page_count = pc,
+	};
+}
+
+static inline uint64_t spci_memory_region_constituent_get_address(
+	struct spci_memory_region_constituent *constituent)
+{
+	return (uint64_t)constituent->address_high << 32 |
+	       constituent->address_low;
+}
+
 /**
  * Gets the constituent array for an `spci_memory_region`.
  */
diff --git a/src/spci_architected_message.c b/src/spci_architected_message.c
index dd24aee..61cd9cf 100644
--- a/src/spci_architected_message.c
+++ b/src/spci_architected_message.c
@@ -227,7 +227,9 @@
 	}
 
 	for (i = 0; i < memory_region->constituent_count; ++i) {
-		ipaddr_t begin = ipa_init(constituents[i].address);
+		ipaddr_t begin =
+			ipa_init(spci_memory_region_constituent_get_address(
+				&constituents[i]));
 		size_t size = constituents[i].page_count * PAGE_SIZE;
 		ipaddr_t end = ipa_add(begin, size);
 		uint32_t current_from_mode;
@@ -327,8 +329,9 @@
 	/* Iterate over the memory region constituents. */
 	for (uint32_t index = 0; index < memory_constituent_count; index++) {
 		size_t size = constituents[index].page_count * PAGE_SIZE;
-		paddr_t pa_begin =
-			pa_from_ipa(ipa_init(constituents[index].address));
+		paddr_t pa_begin = pa_from_ipa(
+			ipa_init(spci_memory_region_constituent_get_address(
+				&constituents[index])));
 		paddr_t pa_end = pa_add(pa_begin, size);
 
 		if (commit) {
@@ -408,7 +411,9 @@
 	/* Iterate over the memory region constituents. */
 	for (uint32_t i = 0; i < memory_constituent_count; ++i) {
 		size_t size = constituents[i].page_count * PAGE_SIZE;
-		paddr_t begin = pa_from_ipa(ipa_init(constituents[i].address));
+		paddr_t begin = pa_from_ipa(
+			ipa_init(spci_memory_region_constituent_get_address(
+				&constituents[i])));
 		paddr_t end = pa_add(begin, size);
 
 		if (!clear_memory(begin, end, &local_page_pool)) {
@@ -465,11 +470,10 @@
 		spci_memory_region_get_constituents(memory_region);
 
 	/*
-	 * Make sure constituents are properly aligned to a 64-bit boundary. If
-	 * not we would get alignment faults trying to read (64-bit) page
-	 * addresses.
+	 * Make sure constituents are properly aligned to a 32-bit boundary. If
+	 * not we would get alignment faults trying to read (32-bit) values.
 	 */
-	if (!is_aligned(constituents, 8)) {
+	if (!is_aligned(constituents, 4)) {
 		return spci_error(SPCI_INVALID_PARAMETERS);
 	}
 
diff --git a/test/vmapi/primary_with_secondaries/memory_sharing.c b/test/vmapi/primary_with_secondaries/memory_sharing.c
index 0c4fe92..ac1a1b6 100644
--- a/test/vmapi/primary_with_secondaries/memory_sharing.c
+++ b/test/vmapi/primary_with_secondaries/memory_sharing.c
@@ -200,7 +200,7 @@
 	uint8_t *ptr = pages;
 	uint32_t msg_size;
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	SERVICE_SELECT(SERVICE_VM1, "memory_increment", mb.send);
@@ -243,7 +243,7 @@
 	uint8_t *ptr = pages;
 	uint32_t msg_size;
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	SERVICE_SELECT(SERVICE_VM1, "spci_memory_lend_relinquish", mb.send);
@@ -278,7 +278,7 @@
 {
 	struct mailbox_buffers mb = set_up_mailbox();
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = PAGE_SIZE, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)PAGE_SIZE, 1),
 	};
 
 	SERVICE_SELECT(SERVICE_VM1, "spci_memory_return", mb.send);
@@ -308,8 +308,9 @@
 	memset_s(ptr, sizeof(pages), 'b', PAGE_SIZE);
 
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
-		{.address = (uint64_t)pages + PAGE_SIZE, .page_count = 2},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
+		spci_memory_region_constituent_init((uint64_t)pages + PAGE_SIZE,
+						    2),
 	};
 
 	msg_size = spci_memory_region_init(
@@ -351,8 +352,9 @@
 	memset_s(ptr, sizeof(pages), 'b', PAGE_SIZE);
 
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
-		{.address = (uint64_t)pages + PAGE_SIZE, .page_count = 2},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
+		spci_memory_region_constituent_init((uint64_t)pages + PAGE_SIZE,
+						    2),
 	};
 
 	msg_size = spci_memory_region_init(
@@ -380,7 +382,7 @@
 	uint8_t *ptr = pages;
 	uint32_t msg_size;
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	SERVICE_SELECT(SERVICE_VM1, "spci_memory_return", mb.send);
@@ -418,7 +420,7 @@
 	uint8_t *ptr = pages;
 	uint32_t msg_size;
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	SERVICE_SELECT(SERVICE_VM1, "spci_memory_lend_relinquish", mb.send);
@@ -455,7 +457,7 @@
 	struct mailbox_buffers mb = set_up_mailbox();
 	uint32_t msg_size;
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	SERVICE_SELECT(SERVICE_VM1, "spci_memory_lend_relinquish", mb.send);
@@ -496,7 +498,7 @@
 	struct mailbox_buffers mb = set_up_mailbox();
 	uint32_t msg_size;
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	SERVICE_SELECT(SERVICE_VM1, "spci_memory_lend_relinquish", mb.send);
@@ -548,7 +550,8 @@
 	/* Check the memory was cleared. */
 	memory_region = (struct spci_memory_region *)mb.recv;
 	constituents = spci_memory_region_get_constituents(memory_region);
-	ptr = (uint8_t *)constituents[0].address;
+	ptr = (uint8_t *)spci_memory_region_constituent_get_address(
+		&constituents[0]);
 	for (int i = 0; i < PAGE_SIZE; ++i) {
 		ASSERT_EQ(ptr[i], 0);
 	}
@@ -579,7 +582,8 @@
 	/* Check the memory was cleared. */
 	memory_region = (struct spci_memory_region *)mb.recv;
 	constituents = spci_memory_region_get_constituents(memory_region);
-	ptr = (uint8_t *)constituents[0].address;
+	ptr = (uint8_t *)spci_memory_region_constituent_get_address(
+		&constituents[0]);
 	for (int i = 0; i < PAGE_SIZE; ++i) {
 		ASSERT_EQ(ptr[i], 0);
 	}
@@ -599,6 +603,7 @@
 	struct mailbox_buffers mb = set_up_mailbox();
 	uint8_t *ptr = pages;
 	uint32_t msg_size;
+	uint64_t address;
 
 	SERVICE_SELECT(SERVICE_VM1, "spci_donate_check_upper_bound", mb.send);
 
@@ -607,8 +612,9 @@
 
 	/* Specify non-contiguous memory regions. */
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
-		{.address = (uint64_t)pages + PAGE_SIZE * 2, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
+		spci_memory_region_constituent_init(
+			(uint64_t)pages + PAGE_SIZE * 2, 1),
 	};
 
 	/*
@@ -629,8 +635,12 @@
 		  1);
 
 	/* Use different memory regions for verifying the second constituent. */
-	constituents[0].address = (uint64_t)pages + PAGE_SIZE * 1;
-	constituents[1].address = (uint64_t)pages + PAGE_SIZE * 3;
+	address = (uint64_t)pages + PAGE_SIZE * 1;
+	constituents[0].address_high = address << 32;
+	constituents[0].address_low = (uint32_t)address;
+	address = (uint64_t)pages + PAGE_SIZE * 3;
+	constituents[1].address_high = address << 32;
+	constituents[1].address_low = (uint32_t)address;
 
 	/*
 	 * Specify that we now want to test the second constituent of the
@@ -659,6 +669,7 @@
 	struct mailbox_buffers mb = set_up_mailbox();
 	uint8_t *ptr = pages;
 	uint32_t msg_size;
+	uint64_t address;
 
 	SERVICE_SELECT(SERVICE_VM1, "spci_donate_check_lower_bound", mb.send);
 
@@ -667,8 +678,9 @@
 
 	/* Specify non-contiguous memory regions. */
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
-		{.address = (uint64_t)pages + PAGE_SIZE * 2, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
+		spci_memory_region_constituent_init(
+			(uint64_t)pages + PAGE_SIZE * 2, 1),
 	};
 
 	/*
@@ -689,8 +701,12 @@
 		  1);
 
 	/* Use different memory regions for verifying the second constituent. */
-	constituents[0].address = (uint64_t)pages + PAGE_SIZE * 1;
-	constituents[1].address = (uint64_t)pages + PAGE_SIZE * 3;
+	address = (uint64_t)pages + PAGE_SIZE * 1;
+	constituents[0].address_high = address << 32;
+	constituents[0].address_low = (uint32_t)address;
+	address = (uint64_t)pages + PAGE_SIZE * 3;
+	constituents[1].address_high = address << 32;
+	constituents[1].address_low = (uint32_t)address;
 
 	/*
 	 * Specify that we now want to test the second constituent of the
@@ -732,7 +748,7 @@
 	memset_s(ptr, sizeof(pages), 'b', 1 * PAGE_SIZE);
 
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	msg_size = spci_memory_region_init(
@@ -779,7 +795,7 @@
 	memset_s(ptr, sizeof(pages), 'b', 1 * PAGE_SIZE);
 
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	/* Set up VM2 to wait for message. */
@@ -830,7 +846,7 @@
 	memset_s(ptr, sizeof(pages), 'b', 1 * PAGE_SIZE);
 
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	/* Donate memory to VM1. */
@@ -881,7 +897,7 @@
 	/* Initialise the memory before giving it. */
 	memset_s(ptr, sizeof(pages), 'b', PAGE_SIZE);
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	msg_size = spci_memory_region_init(
@@ -906,7 +922,7 @@
 	/* Initialise the memory before giving it. */
 	memset_s(ptr, sizeof(pages), 'b', PAGE_SIZE);
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	msg_size = spci_memory_region_init(
@@ -930,7 +946,7 @@
 	/* Initialise the memory before giving it. */
 	memset_s(ptr, sizeof(pages), 'b', PAGE_SIZE);
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	msg_size = spci_memory_region_init(
@@ -958,7 +974,7 @@
 	/* Initialise the memory before giving it. */
 	memset_s(ptr, sizeof(pages), 'b', PAGE_SIZE);
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	/* Try invalid configurations. */
@@ -1021,10 +1037,10 @@
 				continue;
 			}
 			struct spci_memory_region_constituent constituents[] = {
-				{.address = (uint64_t)pages + i,
-				 .page_count = 1},
-				{.address = (uint64_t)pages + PAGE_SIZE + j,
-				 .page_count = 1},
+				spci_memory_region_constituent_init(
+					(uint64_t)pages + i, 1),
+				spci_memory_region_constituent_init(
+					(uint64_t)pages + PAGE_SIZE + j, 1),
 			};
 			uint32_t msg_size = spci_memory_region_init(
 				mb.send, HF_PRIMARY_VM_ID, SERVICE_VM1,
@@ -1062,7 +1078,7 @@
 	/* Initialise the memory before giving it. */
 	memset_s(ptr, sizeof(pages), 'b', PAGE_SIZE);
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	/* Check cannot swap VM IDs. */
@@ -1109,7 +1125,7 @@
 	memset_s(ptr, sizeof(pages), 'b', PAGE_SIZE);
 
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	msg_size = spci_memory_region_init(
@@ -1166,7 +1182,7 @@
 	memset_s(ptr, sizeof(pages), 'b', PAGE_SIZE);
 
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	msg_size = spci_memory_region_init(
@@ -1235,7 +1251,7 @@
 	memset_s(ptr, sizeof(pages), 'b', PAGE_SIZE);
 
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	msg_size = spci_memory_region_init(
@@ -1306,7 +1322,7 @@
 	*ptr2 = 0xD65F03C0;
 
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	msg_size = spci_memory_region_init(
@@ -1353,7 +1369,7 @@
 	*ptr2 = 0xD65F03C0;
 
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
 	};
 
 	msg_size = spci_memory_region_init(
@@ -1397,7 +1413,7 @@
 	memset_s(ptr, sizeof(pages) * 2, 'b', PAGE_SIZE * 2);
 
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 2},
+		spci_memory_region_constituent_init((uint64_t)pages, 2),
 	};
 
 	msg_size = spci_memory_region_init(
@@ -1415,7 +1431,9 @@
 	/* Ensure we can't donate any sub section of memory to another VM. */
 	constituents[0].page_count = 1;
 	for (int i = 1; i < PAGE_SIZE * 2; i++) {
-		constituents[0].address = (uint64_t)pages + PAGE_SIZE;
+		uint64_t address = (uint64_t)pages + PAGE_SIZE;
+		constituents[0].address_high = address << 32;
+		constituents[0].address_low = (uint32_t)address;
 		msg_size = spci_memory_region_init(
 			mb.send, HF_PRIMARY_VM_ID, SERVICE_VM2, constituents,
 			ARRAY_SIZE(constituents), 0, 0, SPCI_MEMORY_RW_X,
@@ -1451,8 +1469,9 @@
 	memset_s(ptr, sizeof(pages), 'b', PAGE_SIZE * 4);
 
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 2},
-		{.address = (uint64_t)pages + PAGE_SIZE * 2, .page_count = 2},
+		spci_memory_region_constituent_init((uint64_t)pages, 2),
+		spci_memory_region_constituent_init(
+			(uint64_t)pages + PAGE_SIZE * 2, 2),
 	};
 
 	msg_size = spci_memory_region_init(
@@ -1474,7 +1493,9 @@
 	/* Ensure we can't donate any sub section of memory to another VM. */
 	constituents[0].page_count = 1;
 	for (int i = 1; i < PAGE_SIZE * 2; i++) {
-		constituents[0].address = (uint64_t)pages + PAGE_SIZE;
+		uint64_t address = (uint64_t)pages + PAGE_SIZE;
+		constituents[0].address_high = address << 32;
+		constituents[0].address_low = (uint32_t)address;
 		msg_size = spci_memory_region_init(
 			mb.send, HF_PRIMARY_VM_ID, SERVICE_VM2, constituents,
 			ARRAY_SIZE(constituents), 0, 0, SPCI_MEMORY_RW_X,
@@ -1510,8 +1531,9 @@
 	memset_s(ptr, sizeof(pages), 'b', PAGE_SIZE * 4);
 
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 2},
-		{.address = (uint64_t)pages + PAGE_SIZE * 3, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 2),
+		spci_memory_region_constituent_init(
+			(uint64_t)pages + PAGE_SIZE * 3, 1),
 	};
 
 	msg_size = spci_memory_region_init(
@@ -1541,7 +1563,8 @@
 
 	/* Now attempt to share only a portion of the same area of memory. */
 	struct spci_memory_region_constituent constituents_subsection[] = {
-		{.address = (uint64_t)pages + PAGE_SIZE * 3, .page_count = 1},
+		spci_memory_region_constituent_init(
+			(uint64_t)pages + PAGE_SIZE * 3, 1),
 	};
 	check_cannot_lend_memory(mb, constituents_subsection,
 				 ARRAY_SIZE(constituents_subsection), -1);
@@ -1554,7 +1577,9 @@
 	/* Attempt to lend again with different permissions. */
 	constituents[0].page_count = 1;
 	for (int i = 0; i < 2; i++) {
-		constituents[0].address = (uint64_t)pages + i * PAGE_SIZE;
+		uint64_t address = (uint64_t)pages + i * PAGE_SIZE;
+		constituents[0].address_high = address << 32;
+		constituents[0].address_low = (uint32_t)address;
 		msg_size = spci_memory_region_init(
 			mb.send, HF_PRIMARY_VM_ID, SERVICE_VM2, constituents,
 			ARRAY_SIZE(constituents), 0, 0, SPCI_MEMORY_RO_X,
@@ -1582,7 +1607,7 @@
 	memset_s(ptr, sizeof(pages) * 2, 'b', PAGE_SIZE * 2);
 
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 2},
+		spci_memory_region_constituent_init((uint64_t)pages, 2),
 	};
 
 	msg_size = spci_memory_region_init(
@@ -1615,7 +1640,9 @@
 	/* Attempt to share again with different permissions. */
 	constituents[0].page_count = 1;
 	for (int i = 0; i < 2; i++) {
-		constituents[0].address = (uint64_t)pages + i * PAGE_SIZE;
+		uint64_t address = (uint64_t)pages + i * PAGE_SIZE;
+		constituents[0].address_high = address << 32;
+		constituents[0].address_low = (uint32_t)address;
 		msg_size = spci_memory_region_init(
 			mb.send, HF_PRIMARY_VM_ID, SERVICE_VM2, constituents,
 			ARRAY_SIZE(constituents), 0, 0, SPCI_MEMORY_RO_X,
@@ -1642,7 +1669,7 @@
 	memset_s(ptr, sizeof(pages) * 2, 'b', PAGE_SIZE * 2);
 
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 2},
+		spci_memory_region_constituent_init((uint64_t)pages, 2),
 	};
 
 	msg_size = spci_memory_region_init(
@@ -1667,6 +1694,7 @@
 	struct mailbox_buffers mb = set_up_mailbox();
 	uint8_t *ptr = pages;
 	uint32_t msg_size;
+	uint64_t address;
 
 	SERVICE_SELECT(SERVICE_VM1, "spci_lend_check_upper_bound", mb.send);
 	SERVICE_SELECT(SERVICE_VM2, "spci_lend_check_upper_bound", mb.send);
@@ -1676,8 +1704,9 @@
 
 	/* Specify non-contiguous memory regions. */
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
-		{.address = (uint64_t)pages + PAGE_SIZE * 2, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
+		spci_memory_region_constituent_init(
+			(uint64_t)pages + PAGE_SIZE * 2, 1),
 	};
 
 	/*
@@ -1698,8 +1727,12 @@
 		  1);
 
 	/* Use different memory regions for verifying the second constituent. */
-	constituents[0].address = (uint64_t)pages + PAGE_SIZE * 1;
-	constituents[1].address = (uint64_t)pages + PAGE_SIZE * 3;
+	address = (uint64_t)pages + PAGE_SIZE * 1;
+	constituents[0].address_high = address << 32;
+	constituents[0].address_low = (uint32_t)address;
+	address = (uint64_t)pages + PAGE_SIZE * 3;
+	constituents[1].address_high = address << 32;
+	constituents[1].address_low = (uint32_t)address;
 
 	/*
 	 * Specify that we now want to test the second constituent of the
@@ -1729,6 +1762,7 @@
 	struct mailbox_buffers mb = set_up_mailbox();
 	uint8_t *ptr = pages;
 	uint32_t msg_size;
+	uint64_t address;
 
 	SERVICE_SELECT(SERVICE_VM1, "spci_lend_check_lower_bound", mb.send);
 	SERVICE_SELECT(SERVICE_VM2, "spci_lend_check_lower_bound", mb.send);
@@ -1738,8 +1772,9 @@
 
 	/* Specify non-contiguous memory regions. */
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)pages, .page_count = 1},
-		{.address = (uint64_t)pages + PAGE_SIZE * 2, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)pages, 1),
+		spci_memory_region_constituent_init(
+			(uint64_t)pages + PAGE_SIZE * 2, 1),
 	};
 
 	/*
@@ -1760,8 +1795,12 @@
 		  1);
 
 	/* Use different memory regions for verifying the second constituent. */
-	constituents[0].address = (uint64_t)pages + PAGE_SIZE * 1;
-	constituents[1].address = (uint64_t)pages + PAGE_SIZE * 3;
+	address = (uint64_t)pages + PAGE_SIZE * 1;
+	constituents[0].address_high = address << 32;
+	constituents[0].address_low = (uint32_t)address;
+	address = (uint64_t)pages + PAGE_SIZE * 3;
+	constituents[1].address_high = address << 32;
+	constituents[1].address_low = (uint32_t)address;
 
 	/*
 	 * Specify that we now want to test the second constituent of the
diff --git a/test/vmapi/primary_with_secondaries/services/memory.c b/test/vmapi/primary_with_secondaries/services/memory.c
index 05272b1..b45c1f0 100644
--- a/test/vmapi/primary_with_secondaries/services/memory.c
+++ b/test/vmapi/primary_with_secondaries/services/memory.c
@@ -44,7 +44,8 @@
 
 		EXPECT_EQ(ret.func, SPCI_MEM_SHARE_32);
 
-		ptr = (uint8_t *)constituents[0].address;
+		ptr = (uint8_t *)spci_memory_region_constituent_get_address(
+			&constituents[0]);
 
 		/* Check the memory was cleared. */
 		for (i = 0; i < PAGE_SIZE; ++i) {
@@ -71,7 +72,7 @@
 
 	/* Give memory to the primary. */
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)&page, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)&page, 1),
 	};
 	uint32_t msg_size = spci_memory_region_init(
 		send_buf, hf_vm_get_id(), HF_PRIMARY_VM_ID, constituents,
@@ -94,7 +95,7 @@
 
 	/* Lend memory to the primary. */
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)&page, .page_count = 1},
+		spci_memory_region_constituent_init((uint64_t)&page, 1),
 	};
 	uint32_t msg_size = spci_memory_region_init(
 		send_buf, hf_vm_get_id(), HF_PRIMARY_VM_ID, constituents,
@@ -137,7 +138,8 @@
 		memory_region = (struct spci_memory_region *)recv_buf;
 		constituents =
 			spci_memory_region_get_constituents(memory_region);
-		ptr = (uint8_t *)constituents[0].address;
+		ptr = (uint8_t *)spci_memory_region_constituent_get_address(
+			&constituents[0]);
 
 		/* Check that one has access to the shared region. */
 		for (i = 0; i < PAGE_SIZE; ++i) {
@@ -186,8 +188,10 @@
 			spci_memory_region_get_constituents(memory_region);
 
 		/* Choose which constituent we want to test. */
-		index = *(uint8_t *)constituents[0].address;
-		ptr = (uint8_t *)constituents[index].address;
+		index = *(uint8_t *)spci_memory_region_constituent_get_address(
+			&constituents[0]);
+		ptr = (uint8_t *)spci_memory_region_constituent_get_address(
+			&constituents[index]);
 		EXPECT_EQ(spci_rx_release().func, SPCI_SUCCESS_32);
 
 		/*
@@ -219,8 +223,10 @@
 			spci_memory_region_get_constituents(memory_region);
 
 		/* Choose which constituent we want to test. */
-		index = *(uint8_t *)constituents[0].address;
-		ptr = (uint8_t *)constituents[index].address;
+		index = *(uint8_t *)spci_memory_region_constituent_get_address(
+			&constituents[0]);
+		ptr = (uint8_t *)spci_memory_region_constituent_get_address(
+			&constituents[index]);
 		EXPECT_EQ(spci_rx_release().func, SPCI_SUCCESS_32);
 
 		/*
@@ -250,7 +256,8 @@
 
 	exception_setup(NULL, exception_handler_yield_data_abort);
 
-	ptr = (uint8_t *)constituents[0].address;
+	ptr = (uint8_t *)spci_memory_region_constituent_get_address(
+		&constituents[0]);
 
 	/* Donate memory to next VM. */
 	msg_size = spci_memory_region_init(
@@ -322,7 +329,8 @@
 
 		EXPECT_EQ(ret.func, SPCI_MEM_DONATE_32);
 
-		ptr = (uint8_t *)constituents[0].address;
+		ptr = (uint8_t *)spci_memory_region_constituent_get_address(
+			&constituents[0]);
 		EXPECT_EQ(spci_rx_release().func, SPCI_SUCCESS_32);
 		ptr[0] = 'd';
 		spci_yield();
@@ -398,9 +406,11 @@
 			    ret.func == SPCI_MEM_LEND_32 ||
 			    ret.func == SPCI_MEM_SHARE_32);
 
-		ptr = (uint8_t *)constituents[0].address;
+		ptr = (uint8_t *)spci_memory_region_constituent_get_address(
+			&constituents[0]);
 		count = constituents[0].page_count;
-		ptr2 = (uint8_t *)constituents[1].address;
+		ptr2 = (uint8_t *)spci_memory_region_constituent_get_address(
+			&constituents[1]);
 		count2 = constituents[1].page_count;
 
 		/* Check that one has access to the shared region. */
@@ -451,7 +461,8 @@
 
 		EXPECT_EQ(ret.func, SPCI_MEM_DONATE_32);
 
-		ptr = (uint8_t *)constituents[0].address;
+		ptr = (uint8_t *)spci_memory_region_constituent_get_address(
+			&constituents[0]);
 
 		/* Check that we have access to the shared region. */
 		for (i = 0; i < PAGE_SIZE; ++i) {
@@ -556,7 +567,8 @@
 
 		EXPECT_EQ(ret.func, SPCI_MEM_LEND_32);
 
-		ptr = (uint64_t *)constituents[0].address;
+		ptr = (uint64_t *)spci_memory_region_constituent_get_address(
+			&constituents[0]);
 		/*
 		 * Verify that the instruction in memory is the encoded RET
 		 * instruction.
@@ -610,7 +622,8 @@
 
 		EXPECT_EQ(spci_rx_release().func, SPCI_SUCCESS_32);
 
-		ptr = (uint8_t *)constituent_copy.address;
+		ptr = (uint8_t *)spci_memory_region_constituent_get_address(
+			&constituent_copy);
 
 		/* Check that we have read access. */
 		for (i = 0; i < PAGE_SIZE; ++i) {
@@ -655,8 +668,10 @@
 	exception_setup(NULL, exception_handler_yield_data_abort);
 
 	/* Choose which constituent we want to test. */
-	index = *(uint8_t *)constituents[0].address;
-	ptr = (uint8_t *)constituents[index].address;
+	index = *(uint8_t *)spci_memory_region_constituent_get_address(
+		&constituents[0]);
+	ptr = (uint8_t *)spci_memory_region_constituent_get_address(
+		&constituents[index]);
 	EXPECT_EQ(spci_rx_release().func, SPCI_SUCCESS_32);
 
 	/* Check that one cannot access after lent region. */
@@ -685,8 +700,10 @@
 	EXPECT_EQ(ret.func, SPCI_MEM_LEND_32);
 
 	/* Choose which constituent we want to test. */
-	index = *(uint8_t *)constituents[0].address;
-	ptr = (uint8_t *)constituents[index].address;
+	index = *(uint8_t *)spci_memory_region_constituent_get_address(
+		&constituents[0]);
+	ptr = (uint8_t *)spci_memory_region_constituent_get_address(
+		&constituents[index]);
 	EXPECT_EQ(spci_rx_release().func, SPCI_SUCCESS_32);
 
 	/* Check that one cannot access after lent region. */
@@ -718,7 +735,8 @@
 
 	EXPECT_EQ(spci_rx_release().func, SPCI_SUCCESS_32);
 
-	ptr = (uint8_t *)constituent_copy.address;
+	ptr = (uint8_t *)spci_memory_region_constituent_get_address(
+		&constituent_copy);
 
 	/* Check that we have read access. */
 	for (i = 0; i < PAGE_SIZE; ++i) {
@@ -731,7 +749,9 @@
 	}
 
 	for (i = 1; i < PAGE_SIZE * 2; i++) {
-		constituent_copy.address = (uint64_t)ptr + i;
+		uint64_t address = (uint64_t)ptr + i;
+		constituent_copy.address_high = address << 32;
+		constituent_copy.address_low = (uint32_t)address;
 
 		/* Fail to lend or share the memory from the primary. */
 		msg_size = spci_memory_region_init(
diff --git a/test/vmapi/primary_with_secondaries/services/unmapped.c b/test/vmapi/primary_with_secondaries/services/unmapped.c
index 9197233..b4a07a4 100644
--- a/test/vmapi/primary_with_secondaries/services/unmapped.c
+++ b/test/vmapi/primary_with_secondaries/services/unmapped.c
@@ -41,7 +41,8 @@
 	void *send_buf = SERVICE_SEND_BUFFER();
 	/* Give some memory to the primary VM so that it's unmapped. */
 	struct spci_memory_region_constituent constituents[] = {
-		{.address = (uint64_t)(&pages[PAGE_SIZE]), .page_count = 1},
+		spci_memory_region_constituent_init(
+			(uint64_t)(&pages[PAGE_SIZE]), 1),
 	};
 	uint32_t msg_size = spci_memory_region_init(
 		send_buf, hf_vm_get_id(), HF_PRIMARY_VM_ID, constituents,
diff --git a/vmlib/spci.c b/vmlib/spci.c
index c6f745a..59c36e4 100644
--- a/vmlib/spci.c
+++ b/vmlib/spci.c
@@ -63,20 +63,19 @@
 	memory_region->attributes[0].memory_attributes = attributes;
 
 	/*
-	 * Constituent offset must be aligned to a 64-bit boundary so that
-	 * 64-bit addresses can be copied without alignment faults.
+	 * Constituent offset must be aligned to a 32-bit boundary so that
+	 * 32-bit values can be copied without alignment faults.
 	 */
 	memory_region->constituent_offset = align_up(
 		sizeof(struct spci_memory_region) +
 			memory_region->attribute_count *
 				sizeof(struct spci_memory_region_attributes),
-		8);
+		4);
 	region_constituents =
 		spci_memory_region_get_constituents(memory_region);
 
 	for (index = 0; index < constituent_count; index++) {
 		region_constituents[index] = constituents[index];
-		region_constituents[index].reserved = 0;
 		memory_region->page_count += constituents[index].page_count;
 	}
 
