afae4e7
Patch carried over from the prior iasl package and updated.  This allows
afae4e7
for builds on big endian systems and cleans up endianness.  Please see
afae4e7
http://lists.acpica.org/pipermail/devel/2010-July/000159.html.  Resolves
afae4e7
BZ#865013 and BZ#856856.
afae4e7
--
afae4e7
afae4e7
Support compiling DSDT tables on big endian architectures.
afae4e7
afae4e7
use the ACPI_MOVE_<N>_TO_<M> macros to swap the data written to the AML file on
afae4e7
big endian architectures (the macros themselves required a few fixes to work
afae4e7
correctly).
afae4e7
In some areas the use of temporary variables was necessary to be able to perform
afae4e7
sanity checks on the data before actually swapping the bytes.
afae4e7
afae4e7
Signed-off-by: Mattia Dongili <malattia@linux.it>
afae4e7
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
afae4e7
---
afae4e7
 source/compiler/aslcodegen.c      | 108 +++++++++++++++++-------------
afae4e7
 source/compiler/aslopcodes.c      |   4 +-
afae4e7
 source/compiler/aslrestype1.c     |  69 ++++++++++++++------
afae4e7
 source/compiler/aslrestype1i.c    |  38 +++++++----
afae4e7
 source/compiler/aslrestype2.c     |  25 ++++---
afae4e7
 source/compiler/aslrestype2d.c    | 134 +++++++++++++++++++++-----------------
afae4e7
 source/compiler/aslrestype2e.c    | 117 +++++++++++++++++++++++----------
afae4e7
 source/compiler/aslrestype2q.c    | 117 +++++++++++++++++++++------------
afae4e7
 source/compiler/aslrestype2s.c    |  86 +++++++++++++++++-------
afae4e7
 source/compiler/aslrestype2w.c    | 127 +++++++++++++++++++++---------------
afae4e7
 source/include/acmacros.h         |  15 +++--
afae4e7
 source/include/platform/aclinux.h |   7 +-
afae4e7
 12 file modificati, 541 inserzioni(+), 306 rimozioni(-)
afae4e7
afae4e7
diff --git a/source/compiler/aslcodegen.c b/source/compiler/aslcodegen.c
afae4e7
index 2252ab4..c3c3e06 100644
afae4e7
--- a/source/compiler/aslcodegen.c
afae4e7
+++ b/source/compiler/aslcodegen.c
afae4e7
@@ -238,16 +238,12 @@ CgWriteAmlOpcode (
afae4e7
     ACPI_PARSE_OBJECT       *Op)
afae4e7
 {
afae4e7
     UINT8                   PkgLenFirstByte;
afae4e7
-    UINT32                  i;
afae4e7
-    union {
afae4e7
-        UINT16                  Opcode;
afae4e7
-        UINT8                   OpcodeBytes[2];
afae4e7
-    } Aml;
afae4e7
-    union {
afae4e7
-        UINT32                  Len;
afae4e7
-        UINT8                   LenBytes[4];
afae4e7
-    } PkgLen;
afae4e7
-
afae4e7
+    UINT8                   Byte;
afae4e7
+    UINT16                  Word;
afae4e7
+    UINT32                  DWord;
afae4e7
+    UINT64                  QWord;
afae4e7
+    UINT16                  AmlOpcode;
afae4e7
+    UINT32                  PkgLen;
afae4e7
 
afae4e7
     /* We expect some DEFAULT_ARGs, just ignore them */
afae4e7
 
afae4e7
@@ -270,51 +266,52 @@
afae4e7
 
afae4e7
         /* Special opcodes for within a field definition */
afae4e7
 
afae4e7
-        Aml.Opcode = AML_FIELD_OFFSET_OP;
afae4e7
+        AmlOpcode = AML_FIELD_OFFSET_OP;
afae4e7
         break;
afae4e7
 
afae4e7
     case AML_INT_ACCESSFIELD_OP:
afae4e7
 
afae4e7
-        Aml.Opcode = AML_FIELD_ACCESS_OP;
afae4e7
+        AmlOpcode = AML_FIELD_ACCESS_OP;
afae4e7
         break;
afae4e7
 
afae4e7
     case AML_INT_CONNECTION_OP:
afae4e7
 
afae4e7
-        Aml.Opcode = AML_FIELD_CONNECTION_OP;
afae4e7
+        AmlOpcode = AML_FIELD_CONNECTION_OP;
afae4e7
         break;
afae4e7
 
afae4e7
     default:
afae4e7
 
afae4e7
-        Aml.Opcode = Op->Asl.AmlOpcode;
afae4e7
+        AmlOpcode = Op->Asl.AmlOpcode;
afae4e7
         break;
afae4e7
     }
afae4e7
 
afae4e7
 
afae4e7
-    switch (Aml.Opcode)
afae4e7
+    switch (AmlOpcode)
afae4e7
     {
afae4e7
     case AML_PACKAGE_LENGTH:
afae4e7
 
afae4e7
         /* Value is the length to be encoded (Used in field definitions) */
afae4e7
 
afae4e7
-        PkgLen.Len = (UINT32) Op->Asl.Value.Integer;
afae4e7
+        PkgLen = (UINT32) Op->Asl.Value.Integer;
afae4e7
         break;
afae4e7
 
afae4e7
     default:
afae4e7
 
afae4e7
         /* Check for two-byte opcode */
afae4e7
 
afae4e7
-        if (Aml.Opcode > 0x00FF)
afae4e7
+        if (AmlOpcode > 0x00FF)
afae4e7
         {
afae4e7
             /* Write the high byte first */
afae4e7
-
afae4e7
-            CgLocalWriteAmlData (Op, &Aml.OpcodeBytes[1], 1);
afae4e7
+	    Byte = ACPI_HIBYTE(AmlOpcode);
afae4e7
+	    CgLocalWriteAmlData (Op, &Byte, 1);
afae4e7
         }
afae4e7
 
afae4e7
-        CgLocalWriteAmlData (Op, &Aml.OpcodeBytes[0], 1);
afae4e7
+	Byte = ACPI_LOBYTE(AmlOpcode);
afae4e7
+        CgLocalWriteAmlData (Op, &Byte, 1);
afae4e7
 
afae4e7
         /* Subtreelength doesn't include length of package length bytes */
afae4e7
 
afae4e7
-        PkgLen.Len = Op->Asl.AmlSubtreeLength + Op->Asl.AmlPkgLenBytes;
afae4e7
+        PkgLen = Op->Asl.AmlSubtreeLength + Op->Asl.AmlPkgLenBytes;
afae4e7
         break;
afae4e7
     }
afae4e7
 
afae4e7
@@ -325,8 +321,8 @@ CgWriteAmlOpcode (
afae4e7
         if (Op->Asl.AmlPkgLenBytes == 1)
afae4e7
         {
afae4e7
             /* Simplest case -- no bytes to follow, just write the count */
afae4e7
-
afae4e7
-            CgLocalWriteAmlData (Op, &PkgLen.LenBytes[0], 1);
afae4e7
+            Byte = ACPI_LOBYTE(PkgLen);
afae4e7
+            CgLocalWriteAmlData (Op, &Byte, 1);
afae4e7
         }
afae4e7
         else if (Op->Asl.AmlPkgLenBytes != 0)
afae4e7
         {
afae4e7
@@ -336,7 +332,7 @@ CgWriteAmlOpcode (
afae4e7
              */
afae4e7
             PkgLenFirstByte = (UINT8)
afae4e7
                 (((UINT32) (Op->Asl.AmlPkgLenBytes - 1) << 6) |
afae4e7
-                (PkgLen.LenBytes[0] & 0x0F));
afae4e7
+                (PkgLen & 0x0F));
afae4e7
 
afae4e7
             CgLocalWriteAmlData (Op, &PkgLenFirstByte, 1);
afae4e7
 
afae4e7
@@ -344,37 +340,44 @@ CgWriteAmlOpcode (
afae4e7
              * Shift the length over by the 4 bits we just stuffed
afae4e7
              * in the first byte
afae4e7
              */
afae4e7
-            PkgLen.Len >>= 4;
afae4e7
+            PkgLen >>= 4;
afae4e7
 
afae4e7
             /* Now we can write the remaining bytes - either 1, 2, or 3 bytes */
afae4e7
-
afae4e7
-            for (i = 0; i < (UINT32) (Op->Asl.AmlPkgLenBytes - 1); i++)
afae4e7
+            Byte = ACPI_LOBYTE(PkgLen);
afae4e7
+            CgLocalWriteAmlData (Op, &Byte, 1);
afae4e7
+            if (Op->Asl.AmlPkgLenBytes >= 3)
afae4e7
+            {
afae4e7
+                Byte = ACPI_HIBYTE(PkgLen);
afae4e7
+                CgLocalWriteAmlData (Op, &Byte, 1);
afae4e7
+            }
afae4e7
+            if (Op->Asl.AmlPkgLenBytes >= 4)
afae4e7
             {
afae4e7
-                CgLocalWriteAmlData (Op, &PkgLen.LenBytes[i], 1);
afae4e7
+                Byte = ACPI_LOBYTE(ACPI_HIWORD(PkgLen));
afae4e7
+                CgLocalWriteAmlData (Op, &Byte, 1);
afae4e7
             }
afae4e7
         }
afae4e7
     }
afae4e7
 
afae4e7
-    switch (Aml.Opcode)
afae4e7
+    switch (AmlOpcode)
afae4e7
     {
afae4e7
     case AML_BYTE_OP:
afae4e7
-
afae4e7
-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 1);
afae4e7
+        Byte = (UINT8) Op->Asl.Value.Integer;
afae4e7
+        CgLocalWriteAmlData (Op, &Byte, 1);
afae4e7
         break;
afae4e7
 
afae4e7
     case AML_WORD_OP:
afae4e7
-
afae4e7
-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 2);
afae4e7
+        ACPI_MOVE_64_TO_16(&Word, &Op->Asl.Value.Integer);
afae4e7
+        CgLocalWriteAmlData (Op, &Word, 2);
afae4e7
        break;
afae4e7
 
afae4e7
     case AML_DWORD_OP:
afae4e7
-
afae4e7
-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 4);
afae4e7
+        ACPI_MOVE_64_TO_32(&DWord, &Op->Asl.Value.Integer);
afae4e7
+        CgLocalWriteAmlData (Op, &DWord, 4);
afae4e7
         break;
afae4e7
 
afae4e7
     case AML_QWORD_OP:
afae4e7
-
afae4e7
-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, 8);
afae4e7
+        ACPI_MOVE_64_TO_64(&QWord, &Op->Asl.Value.Integer);
afae4e7
+        CgLocalWriteAmlData (Op, &QWord, 8);
afae4e7
         break;
afae4e7
 
afae4e7
     case AML_STRING_OP:
afae4e7
@@ -408,6 +409,7 @@ CgWriteTableHeader (
afae4e7
     ACPI_PARSE_OBJECT       *Op)
afae4e7
 {
afae4e7
     ACPI_PARSE_OBJECT       *Child;
afae4e7
+    UINT32 DWord;
afae4e7
 
afae4e7
 
afae4e7
     /* AML filename */
afae4e7
@@ -444,7 +446,7 @@ CgWriteTableHeader (
afae4e7
     /* OEM Revision */
afae4e7
 
afae4e7
     Child = Child->Asl.Next;
afae4e7
-    TableHeader.OemRevision = (UINT32) Child->Asl.Value.Integer;
afae4e7
+    ACPI_MOVE_64_TO_32(&TableHeader.OemRevision, &Child->Asl.Value.Integer);
afae4e7
 
afae4e7
     /* Compiler ID */
afae4e7
 
afae4e7
@@ -452,11 +453,12 @@ CgWriteTableHeader (
afae4e7
 
afae4e7
     /* Compiler version */
afae4e7
 
afae4e7
-    TableHeader.AslCompilerRevision = ASL_REVISION;
afae4e7
+    DWord = ASL_REVISION;
afae4e7
+    ACPI_MOVE_32_TO_32(&TableHeader.AslCompilerRevision, &DWord);
afae4e7
 
afae4e7
     /* Table length. Checksum zero for now, will rewrite later */
afae4e7
 
afae4e7
-    TableHeader.Length   = Gbl_TableLength;
afae4e7
+    ACPI_MOVE_32_TO_32(&TableHeader.Length, &Gbl_TableLength);
afae4e7
     TableHeader.Checksum = 0;
afae4e7
 
afae4e7
     CgLocalWriteAmlData (Op, &TableHeader, sizeof (ACPI_TABLE_HEADER));
afae4e7
@@ -520,7 +523,10 @@ CgWriteNode (
afae4e7
     ACPI_PARSE_OBJECT       *Op)
afae4e7
 {
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
-
afae4e7
+    UINT8                   Byte;
afae4e7
+    UINT16                  Word;
afae4e7
+    UINT32                  DWord;
afae4e7
+    UINT64                  QWord;
afae4e7
 
afae4e7
     /* Always check for DEFAULT_ARG and other "Noop" nodes */
afae4e7
     /* TBD: this may not be the best place for this check */
afae4e7
@@ -538,13 +544,24 @@ CgWriteNode (
afae4e7
     switch (Op->Asl.AmlOpcode)
afae4e7
     {
afae4e7
     case AML_RAW_DATA_BYTE:
afae4e7
+        Byte = (UINT8) Op->Asl.Value.Integer;
afae4e7
+        CgLocalWriteAmlData (Op, &Byte, 1);
afae4e7
+        return;
afae4e7
+
afae4e7
     case AML_RAW_DATA_WORD:
afae4e7
-    case AML_RAW_DATA_DWORD:
afae4e7
-    case AML_RAW_DATA_QWORD:
afae4e7
+        ACPI_MOVE_64_TO_16(&Word, &Op->Asl.Value.Integer);
afae4e7
+        CgLocalWriteAmlData (Op, &Word, 2);
afae4e7
+        return;
afae4e7
 
afae4e7
-        CgLocalWriteAmlData (Op, &Op->Asl.Value.Integer, Op->Asl.AmlLength);
afae4e7
+    case AML_RAW_DATA_DWORD:
afae4e7
+        ACPI_MOVE_64_TO_32(&DWord, &Op->Asl.Value.Integer);
afae4e7
+        CgLocalWriteAmlData (Op, &DWord, 4);
afae4e7
         return;
afae4e7
 
afae4e7
+    case AML_RAW_DATA_QWORD:
afae4e7
+        ACPI_MOVE_64_TO_64(&QWord, &Op->Asl.Value.Integer);
afae4e7
+        CgLocalWriteAmlData (Op, &QWord, 8);
afae4e7
+        return;
afae4e7
 
afae4e7
     case AML_RAW_DATA_BUFFER:
afae4e7
 
afae4e7
diff --git a/source/compiler/aslopcodes.c b/source/compiler/aslopcodes.c
afae4e7
index cddc945..6deddc9 100644
afae4e7
--- a/source/compiler/aslopcodes.c
afae4e7
+++ b/source/compiler/aslopcodes.c
afae4e7
@@ -476,6 +475,7 @@ OpcDoUnicode (
afae4e7
     UINT32                  i;
afae4e7
     UINT8                   *AsciiString;
afae4e7
     UINT16                  *UnicodeString;
afae4e7
+    UINT16                  UChar;
afae4e7
     ACPI_PARSE_OBJECT       *BufferLengthOp;
afae4e7
 
afae4e7
 
afae4e7
@@ -502,7 +502,8 @@ OpcDoUnicode (
afae4e7
 
afae4e7
     for (i = 0; i < Count; i++)
afae4e7
     {
afae4e7
-        UnicodeString[i] = (UINT16) AsciiString[i];
afae4e7
+        UChar = (UINT16) AsciiString[i];
afae4e7
+        ACPI_MOVE_16_TO_16(&UnicodeString[i], &UChar);
afae4e7
     }
afae4e7
 
afae4e7
     /*
afae4e7
diff --git a/source/compiler/aslrestype1.c b/source/compiler/aslrestype1.c
afae4e7
index 5b92151..b1fa5f5 100644
afae4e7
--- a/source/compiler/aslrestype1.c
afae4e7
+++ b/source/compiler/aslrestype1.c
afae4e7
@@ -152,6 +152,11 @@ RsDoMemory24Descriptor (
afae4e7
     ACPI_PARSE_OBJECT       *MaxOp = NULL;
afae4e7
     ACPI_PARSE_OBJECT       *LengthOp = NULL;
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
+    UINT16                  Minimum = 0;
afae4e7
+    UINT16                  Maximum = 0;
afae4e7
+    UINT16                  AddressLength = 0;
afae4e7
+    UINT16                  Alignment = 0;
afae4e7
+    UINT16                  ResourceLength;
afae4e7
     UINT32                  i;
afae4e7
 
afae4e7
 
afae4e7
@@ -160,7 +165,8 @@ RsDoMemory24Descriptor (
afae4e7
 
afae4e7
     Descriptor = Rnode->Buffer;
afae4e7
     Descriptor->Memory24.DescriptorType  = ACPI_RESOURCE_NAME_MEMORY24;
afae4e7
-    Descriptor->Memory24.ResourceLength = 9;
afae4e7
+    ResourceLength = 9;
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.ResourceLength, &ResourceLength);
afae4e7
 
afae4e7
     /* Process all child initialization nodes */
afae4e7
 
afae4e7
@@ -177,7 +183,7 @@ RsDoMemory24Descriptor (
afae4e7
 
afae4e7
         case 1: /* Min Address */
afae4e7
 
afae4e7
-            Descriptor->Memory24.Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Minimum));
afae4e7
             MinOp = InitializerOp;
afae4e7
@@ -185,7 +191,7 @@ RsDoMemory24Descriptor (
afae4e7
 
afae4e7
         case 2: /* Max Address */
afae4e7
 
afae4e7
-            Descriptor->Memory24.Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Maximum));
afae4e7
             MaxOp = InitializerOp;
afae4e7
@@ -193,14 +199,14 @@ RsDoMemory24Descriptor (
afae4e7
 
afae4e7
         case 3: /* Alignment */
afae4e7
 
afae4e7
-            Descriptor->Memory24.Alignment = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            Alignment = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_ALIGNMENT,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.Alignment));
afae4e7
             break;
afae4e7
 
afae4e7
         case 4: /* Length */
afae4e7
 
afae4e7
-            Descriptor->Memory24.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory24.AddressLength));
afae4e7
             LengthOp = InitializerOp;
afae4e7
@@ -223,12 +229,17 @@ RsDoMemory24Descriptor (
afae4e7
     /* Validate the Min/Max/Len/Align values (Alignment==0 means 64K) */
afae4e7
 
afae4e7
     RsSmallAddressCheck (ACPI_RESOURCE_NAME_MEMORY24,
afae4e7
-        Descriptor->Memory24.Minimum,
afae4e7
-        Descriptor->Memory24.Maximum,
afae4e7
-        Descriptor->Memory24.AddressLength,
afae4e7
-        Descriptor->Memory24.Alignment,
afae4e7
+        Minimum,
afae4e7
+        Maximum,
afae4e7
+        AddressLength,
afae4e7
+        Alignment,
afae4e7
         MinOp, MaxOp, LengthOp, NULL, Op);
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.Minimum, &Minimum);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.Maximum, &Maximum);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.AddressLength, &AddressLength);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Memory24.Alignment, &Alignment);
afae4e7
+
afae4e7
     return (Rnode);
afae4e7
 }
afae4e7
 
afae4e7
@@ -259,6 +270,11 @@ RsDoMemory32Descriptor (
afae4e7
     ACPI_PARSE_OBJECT       *LengthOp = NULL;
afae4e7
     ACPI_PARSE_OBJECT       *AlignOp = NULL;
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
+    UINT32                  Minimum = 0;
afae4e7
+    UINT32                  Maximum = 0;
afae4e7
+    UINT32                  AddressLength = 0;
afae4e7
+    UINT32                  Alignment = 0;
afae4e7
+    UINT16                  ResourceLength;
afae4e7
     UINT32                  i;
afae4e7
 
afae4e7
 
afae4e7
@@ -267,7 +283,8 @@ RsDoMemory32Descriptor (
afae4e7
 
afae4e7
     Descriptor = Rnode->Buffer;
afae4e7
     Descriptor->Memory32.DescriptorType  = ACPI_RESOURCE_NAME_MEMORY32;
afae4e7
-    Descriptor->Memory32.ResourceLength = 17;
afae4e7
+    ResourceLength = 17;
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Memory32.ResourceLength, &ResourceLength);
afae4e7
 
afae4e7
     /* Process all child initialization nodes */
afae4e7
 
afae4e7
@@ -284,7 +301,7 @@ RsDoMemory32Descriptor (
afae4e7
 
afae4e7
         case 1:  /* Min Address */
afae4e7
 
afae4e7
-            Descriptor->Memory32.Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Minimum));
afae4e7
             MinOp = InitializerOp;
afae4e7
@@ -292,7 +309,7 @@ RsDoMemory32Descriptor (
afae4e7
 
afae4e7
         case 2: /* Max Address */
afae4e7
 
afae4e7
-            Descriptor->Memory32.Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Maximum));
afae4e7
             MaxOp = InitializerOp;
afae4e7
@@ -300,7 +317,7 @@ RsDoMemory32Descriptor (
afae4e7
 
afae4e7
         case 3: /* Alignment */
afae4e7
 
afae4e7
-            Descriptor->Memory32.Alignment = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            Alignment = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_ALIGNMENT,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.Alignment));
afae4e7
             AlignOp = InitializerOp;
afae4e7
@@ -308,7 +325,7 @@ RsDoMemory32Descriptor (
afae4e7
 
afae4e7
         case 4: /* Length */
afae4e7
 
afae4e7
-            Descriptor->Memory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Memory32.AddressLength));
afae4e7
             LengthOp = InitializerOp;
afae4e7
@@ -331,12 +348,17 @@ RsDoMemory32Descriptor (
afae4e7
     /* Validate the Min/Max/Len/Align values */
afae4e7
 
afae4e7
     RsSmallAddressCheck (ACPI_RESOURCE_NAME_MEMORY32,
afae4e7
-        Descriptor->Memory32.Minimum,
afae4e7
-        Descriptor->Memory32.Maximum,
afae4e7
-        Descriptor->Memory32.AddressLength,
afae4e7
-        Descriptor->Memory32.Alignment,
afae4e7
+        Minimum,
afae4e7
+        Maximum,
afae4e7
+        AddressLength,
afae4e7
+        Alignment,
afae4e7
         MinOp, MaxOp, LengthOp, AlignOp, Op);
afae4e7
 
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Memory32.Minimum, &Minimum);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Memory32.Maximum, &Maximum);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Memory32.AddressLength, &AddressLength);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Memory32.Alignment, &Alignment);
afae4e7
+
afae4e7
     return (Rnode);
afae4e7
 }
afae4e7
 
afae4e7
@@ -363,6 +385,7 @@ RsDoMemory32FixedDescriptor (
afae4e7
     AML_RESOURCE            *Descriptor;
afae4e7
     ACPI_PARSE_OBJECT       *InitializerOp;
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
+    UINT16                  ResourceLength;
afae4e7
     UINT32                  i;
afae4e7
 
afae4e7
 
afae4e7
@@ -371,7 +394,8 @@ RsDoMemory32FixedDescriptor (
afae4e7
 
afae4e7
     Descriptor = Rnode->Buffer;
afae4e7
     Descriptor->FixedMemory32.DescriptorType  = ACPI_RESOURCE_NAME_FIXED_MEMORY32;
afae4e7
-    Descriptor->FixedMemory32.ResourceLength = 9;
afae4e7
+    ResourceLength = 9;
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->FixedMemory32.ResourceLength, &ResourceLength);
afae4e7
 
afae4e7
     /* Process all child initialization nodes */
afae4e7
 
afae4e7
@@ -388,14 +412,16 @@ RsDoMemory32FixedDescriptor (
afae4e7
 
afae4e7
         case 1: /* Address */
afae4e7
 
afae4e7
-            Descriptor->FixedMemory32.Address = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            ACPI_MOVE_64_TO_32(&Descriptor->FixedMemory32.Address,
afae4e7
+                &InitializerOp->Asl.Value.Integer);
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_BASEADDRESS,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.Address));
afae4e7
             break;
afae4e7
 
afae4e7
         case 2: /* Length */
afae4e7
 
afae4e7
-            Descriptor->FixedMemory32.AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            ACPI_MOVE_64_TO_32(&Descriptor->FixedMemory32.AddressLength,
afae4e7
+                &InitializerOp->Asl.Value.Integer);
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedMemory32.AddressLength));
afae4e7
             break;
afae4e7
diff --git a/source/compiler/aslrestype1i.c b/source/compiler/aslrestype1i.c
afae4e7
index 8335e8f..097eb05 100644
afae4e7
--- a/source/compiler/aslrestype1i.c
afae4e7
+++ b/source/compiler/aslrestype1i.c
afae4e7
@@ -202,6 +202,8 @@ RsDoFixedDmaDescriptor (
afae4e7
     AML_RESOURCE            *Descriptor;
afae4e7
     ACPI_PARSE_OBJECT       *InitializerOp;
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
+    UINT16                  RequestLines = 0;
afae4e7
+    UINT16                  Channels = 0;
afae4e7
     UINT32                  i;
afae4e7
 
afae4e7
 
afae4e7
@@ -220,14 +222,14 @@ RsDoFixedDmaDescriptor (
afae4e7
         {
afae4e7
         case 0: /* DMA Request Lines [WORD] (_DMA) */
afae4e7
 
afae4e7
-            Descriptor->FixedDma.RequestLines = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            RequestLines = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_DMA,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.RequestLines));
afae4e7
             break;
afae4e7
 
afae4e7
         case 1: /* DMA Channel [WORD] (_TYP) */
afae4e7
 
afae4e7
-            Descriptor->FixedDma.Channels = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            Channels = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_DMATYPE,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedDma.Channels));
afae4e7
             break;
afae4e7
@@ -252,6 +253,9 @@ RsDoFixedDmaDescriptor (
afae4e7
         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
afae4e7
     }
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->FixedDma.RequestLines, &RequestLines);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->FixedDma.Channels, &Channels);
afae4e7
+
afae4e7
     return (Rnode);
afae4e7
 }
afae4e7
 
afae4e7
@@ -279,6 +283,7 @@ RsDoFixedIoDescriptor (
afae4e7
     ACPI_PARSE_OBJECT       *InitializerOp;
afae4e7
     ACPI_PARSE_OBJECT       *AddressOp = NULL;
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
+    UINT16                  Address = 0;
afae4e7
     UINT32                  i;
afae4e7
 
afae4e7
 
afae4e7
@@ -297,8 +302,7 @@ RsDoFixedIoDescriptor (
afae4e7
         {
afae4e7
         case 0: /* Base Address */
afae4e7
 
afae4e7
-            Descriptor->FixedIo.Address =
afae4e7
-                (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            Address = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_BASEADDRESS,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (FixedIo.Address));
afae4e7
             AddressOp = InitializerOp;
afae4e7
@@ -328,11 +332,13 @@ RsDoFixedIoDescriptor (
afae4e7
 
afae4e7
     /* Error checks */
afae4e7
 
afae4e7
-    if (Descriptor->FixedIo.Address > 0x03FF)
afae4e7
+    if (Address > 0x03FF)
afae4e7
     {
afae4e7
         AslError (ASL_WARNING, ASL_MSG_ISA_ADDRESS, AddressOp, NULL);
afae4e7
     }
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->FixedIo.Address, &Address);
afae4e7
+
afae4e7
     return (Rnode);
afae4e7
 }
afae4e7
 
afae4e7
@@ -363,6 +369,8 @@ RsDoIoDescriptor (
afae4e7
     ACPI_PARSE_OBJECT       *LengthOp = NULL;
afae4e7
     ACPI_PARSE_OBJECT       *AlignOp = NULL;
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
+    UINT16                  Minimum = 0;
afae4e7
+    UINT16                  Maximum = 0;
afae4e7
     UINT32                  i;
afae4e7
 
afae4e7
 
afae4e7
@@ -388,8 +396,7 @@ RsDoIoDescriptor (
afae4e7
 
afae4e7
         case 1:  /* Min Address */
afae4e7
 
afae4e7
-            Descriptor->Io.Minimum =
afae4e7
-                (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Minimum));
afae4e7
             MinOp = InitializerOp;
afae4e7
@@ -397,8 +404,7 @@ RsDoIoDescriptor (
afae4e7
 
afae4e7
         case 2: /* Max Address */
afae4e7
 
afae4e7
-            Descriptor->Io.Maximum =
afae4e7
-                (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Io.Maximum));
afae4e7
             MaxOp = InitializerOp;
afae4e7
@@ -439,12 +445,15 @@ RsDoIoDescriptor (
afae4e7
     /* Validate the Min/Max/Len/Align values */
afae4e7
 
afae4e7
     RsSmallAddressCheck (ACPI_RESOURCE_NAME_IO,
afae4e7
-        Descriptor->Io.Minimum,
afae4e7
-        Descriptor->Io.Maximum,
afae4e7
+        Minimum,
afae4e7
+        Maximum,
afae4e7
         Descriptor->Io.AddressLength,
afae4e7
         Descriptor->Io.Alignment,
afae4e7
         MinOp, MaxOp, LengthOp, AlignOp, Op);
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Io.Minimum, &Minimum);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Io.Maximum, &Maximum);
afae4e7
+
afae4e7
     return (Rnode);
afae4e7
 }
afae4e7
 
afae4e7
@@ -565,9 +574,9 @@ RsDoIrqDescriptor (
afae4e7
         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
afae4e7
     }
afae4e7
 
afae4e7
-    /* Now we can set the channel mask */
afae4e7
+    /* Now we can set the interrupt mask */
afae4e7
 
afae4e7
-    Descriptor->Irq.IrqMask = IrqMask;
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Irq.IrqMask, &IrqMask);
afae4e7
     return (Rnode);
afae4e7
 }
afae4e7
 
afae4e7
@@ -667,6 +676,6 @@ RsDoIrqNoFlagsDescriptor (
afae4e7
 
afae4e7
     /* Now we can set the interrupt mask */
afae4e7
 
afae4e7
-    Descriptor->Irq.IrqMask = IrqMask;
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Irq.IrqMask, &IrqMask);
afae4e7
     return (Rnode);
afae4e7
 }
afae4e7
diff --git a/source/compiler/aslrestype2.c b/source/compiler/aslrestype2.c
afae4e7
index f0de854..b6d8d1d 100644
afae4e7
--- a/source/compiler/aslrestype2.c
afae4e7
+++ b/source/compiler/aslrestype2.c
afae4e7
@@ -79,6 +79,7 @@ RsDoGeneralRegisterDescriptor (
afae4e7
     AML_RESOURCE            *Descriptor;
afae4e7
     ACPI_PARSE_OBJECT       *InitializerOp;
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
+    UINT16                  ResourceLength;
afae4e7
     UINT32                  i;
afae4e7
 
afae4e7
 
afae4e7
@@ -87,7 +88,9 @@ RsDoGeneralRegisterDescriptor (
afae4e7
 
afae4e7
     Descriptor = Rnode->Buffer;
afae4e7
     Descriptor->GenericReg.DescriptorType = ACPI_RESOURCE_NAME_GENERIC_REGISTER;
afae4e7
-    Descriptor->GenericReg.ResourceLength = 12;
afae4e7
+    ResourceLength = 12;
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->GenericReg.ResourceLength,
afae4e7
+		    &ResourceLength);
afae4e7
 
afae4e7
     /* Process all child initialization nodes */
afae4e7
 
afae4e7
@@ -118,7 +121,8 @@ RsDoGeneralRegisterDescriptor (
afae4e7
 
afae4e7
         case 3: /* Register Address */
afae4e7
 
afae4e7
-            Descriptor->GenericReg.Address = InitializerOp->Asl.Value.Integer;
afae4e7
+	    ACPI_MOVE_64_TO_64(&Descriptor->GenericReg.Address,
afae4e7
+			    &InitializerOp->Asl.Value.Integer);
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_ADDRESS,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (GenericReg.Address));
afae4e7
             break;
afae4e7
@@ -176,6 +180,7 @@ RsDoInterruptDescriptor (
afae4e7
     AML_RESOURCE            *Rover = NULL;
afae4e7
     ACPI_PARSE_OBJECT       *InitializerOp;
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
+    UINT16                  ResourceLength = 0;
afae4e7
     UINT16                  StringLength = 0;
afae4e7
     UINT32                  OptionIndex = 0;
afae4e7
     UINT32                  i;
afae4e7
@@ -222,7 +227,7 @@ RsDoInterruptDescriptor (
afae4e7
      * Initial descriptor length -- may be enlarged if there are
afae4e7
      * optional fields present
afae4e7
      */
afae4e7
-    Descriptor->ExtendedIrq.ResourceLength  = 2;  /* Flags and table length byte */
afae4e7
+    ResourceLength  = 2;  /* Flags and table length byte */
afae4e7
     Descriptor->ExtendedIrq.InterruptCount  = 0;
afae4e7
 
afae4e7
     Rover = ACPI_CAST_PTR (AML_RESOURCE,
afae4e7
@@ -330,10 +335,11 @@ RsDoInterruptDescriptor (
afae4e7
 
afae4e7
             /* Save the integer and move pointer to the next one */
afae4e7
 
afae4e7
-            Rover->DwordItem = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            ACPI_MOVE_64_TO_32(&Rover->DwordItem,
afae4e7
+                &InitializerOp->Asl.Value.Integer);
afae4e7
             Rover = ACPI_ADD_PTR (AML_RESOURCE, &(Rover->DwordItem), 4);
afae4e7
             Descriptor->ExtendedIrq.InterruptCount++;
afae4e7
-            Descriptor->ExtendedIrq.ResourceLength += 4;
afae4e7
+            ResourceLength += 4;
afae4e7
 
afae4e7
             /* Case 7: First interrupt number in list */
afae4e7
 
afae4e7
@@ -369,7 +376,7 @@ RsDoInterruptDescriptor (
afae4e7
     {
afae4e7
         Rover->ByteItem = ResSourceIndex;
afae4e7
         Rover = ACPI_ADD_PTR (AML_RESOURCE, &(Rover->ByteItem), 1);
afae4e7
-        Descriptor->ExtendedIrq.ResourceLength += 1;
afae4e7
+        ResourceLength += 1;
afae4e7
     }
afae4e7
 
afae4e7
     /* Add optional ResSource string if present */
afae4e7
@@ -381,13 +387,14 @@ RsDoInterruptDescriptor (
afae4e7
         Rover = ACPI_ADD_PTR (
afae4e7
                     AML_RESOURCE, &(Rover->ByteItem), StringLength);
afae4e7
 
afae4e7
-        Descriptor->ExtendedIrq.ResourceLength = (UINT16)
afae4e7
-            (Descriptor->ExtendedIrq.ResourceLength + StringLength);
afae4e7
+        ResourceLength = (UINT16) (ResourceLength + StringLength);
afae4e7
     }
afae4e7
 
afae4e7
     Rnode->BufferLength = (ASL_RESDESC_OFFSET (ExtendedIrq.Interrupts[0]) -
afae4e7
                            ASL_RESDESC_OFFSET (ExtendedIrq.DescriptorType))
afae4e7
                            + OptionIndex + StringLength;
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->ExtendedIrq.ResourceLength,
afae4e7
+		    &ResourceLength);
afae4e7
     return (Rnode);
afae4e7
 }
afae4e7
 
afae4e7
@@ -438,7 +445,7 @@ RsDoVendorLargeDescriptor (
afae4e7
 
afae4e7
     Descriptor = Rnode->Buffer;
afae4e7
     Descriptor->VendorLarge.DescriptorType  = ACPI_RESOURCE_NAME_VENDOR_LARGE;
afae4e7
-    Descriptor->VendorLarge.ResourceLength = (UINT16) i;
afae4e7
+    ACPI_MOVE_32_TO_16(&Descriptor->VendorLarge.ResourceLength, &i);
afae4e7
 
afae4e7
     /* Point to end-of-descriptor for vendor data */
afae4e7
 
afae4e7
diff --git a/source/compiler/aslrestype2d.c b/source/compiler/aslrestype2d.c
afae4e7
index 1ca0f2d..5bebd30 100644
afae4e7
--- a/source/compiler/aslrestype2d.c
afae4e7
+++ b/source/compiler/aslrestype2d.c
afae4e7
@@ -83,7 +83,13 @@ RsDoDwordIoDescriptor (
afae4e7
     ACPI_PARSE_OBJECT       *GranOp = NULL;
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
     UINT16                  StringLength = 0;
afae4e7
+    UINT16                  ResourceLength = 0;
afae4e7
     UINT32                  OptionIndex = 0;
afae4e7
+    UINT32                  Minimum = 0;
afae4e7
+    UINT32                  Maximum = 0;
afae4e7
+    UINT32                  AddressLength = 0;
afae4e7
+    UINT32                  Granularity = 0;
afae4e7
+    UINT32                  TranslationOffset = 0;
afae4e7
     UINT8                   *OptionalFields;
afae4e7
     UINT32                  i;
afae4e7
     BOOLEAN                 ResSourceIndex = FALSE;
afae4e7
@@ -104,8 +110,7 @@ RsDoDwordIoDescriptor (
afae4e7
      * optional fields present
afae4e7
      */
afae4e7
     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
afae4e7
-    Descriptor->Address32.ResourceLength = (UINT16)
afae4e7
-        (sizeof (AML_RESOURCE_ADDRESS32) -
afae4e7
+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS32) -
afae4e7
          sizeof (AML_RESOURCE_LARGE_HEADER));
afae4e7
 
afae4e7
     /* Process all child initialization nodes */
afae4e7
@@ -149,8 +154,7 @@ RsDoDwordIoDescriptor (
afae4e7
 
afae4e7
         case 5: /* Address Granularity */
afae4e7
 
afae4e7
-            Descriptor->Address32.Granularity =
afae4e7
-                (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            Granularity = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
afae4e7
             GranOp = InitializerOp;
afae4e7
@@ -158,8 +162,7 @@ RsDoDwordIoDescriptor (
afae4e7
 
afae4e7
         case 6: /* Address Min */
afae4e7
 
afae4e7
-            Descriptor->Address32.Minimum =
afae4e7
-                (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
afae4e7
             MinOp = InitializerOp;
afae4e7
@@ -167,8 +170,7 @@ RsDoDwordIoDescriptor (
afae4e7
 
afae4e7
         case 7: /* Address Max */
afae4e7
 
afae4e7
-            Descriptor->Address32.Maximum =
afae4e7
-                (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
afae4e7
             MaxOp = InitializerOp;
afae4e7
@@ -176,16 +178,14 @@ RsDoDwordIoDescriptor (
afae4e7
 
afae4e7
         case 8: /* Translation Offset */
afae4e7
 
afae4e7
-            Descriptor->Address32.TranslationOffset =
afae4e7
-                (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            TranslationOffset = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
afae4e7
             break;
afae4e7
 
afae4e7
         case 9: /* Address Length */
afae4e7
 
afae4e7
-            Descriptor->Address32.AddressLength =
afae4e7
-                (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
afae4e7
             LengthOp = InitializerOp;
afae4e7
@@ -199,7 +199,7 @@ RsDoDwordIoDescriptor (
afae4e7
 
afae4e7
                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
afae4e7
                 OptionIndex++;
afae4e7
-                Descriptor->Address32.ResourceLength++;
afae4e7
+                ResourceLength++;
afae4e7
                 ResSourceIndex = TRUE;
afae4e7
             }
afae4e7
             break;
afae4e7
@@ -213,8 +213,7 @@ RsDoDwordIoDescriptor (
afae4e7
                 {
afae4e7
                     /* Found a valid ResourceSource */
afae4e7
 
afae4e7
-                    Descriptor->Address32.ResourceLength = (UINT16)
afae4e7
-                        (Descriptor->Address32.ResourceLength + StringLength);
afae4e7
+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
afae4e7
 
afae4e7
                     strcpy ((char *)
afae4e7
                         &OptionalFields[OptionIndex],
afae4e7
@@ -274,13 +273,20 @@ RsDoDwordIoDescriptor (
afae4e7
     /* Validate the Min/Max/Len/Gran values */
afae4e7
 
afae4e7
     RsLargeAddressCheck (
afae4e7
-        (UINT64) Descriptor->Address32.Minimum,
afae4e7
-        (UINT64) Descriptor->Address32.Maximum,
afae4e7
-        (UINT64) Descriptor->Address32.AddressLength,
afae4e7
-        (UINT64) Descriptor->Address32.Granularity,
afae4e7
+        Minimum,
afae4e7
+        Maximum,
afae4e7
+        AddressLength,
afae4e7
+        Granularity,
afae4e7
         Descriptor->Address32.Flags,
afae4e7
         MinOp, MaxOp, LengthOp, GranOp, Op);
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address32.ResourceLength, &ResourceLength);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Minimum, &Minimum);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Maximum, &Maximum);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.AddressLength, &AddressLength);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Granularity, &Granularity);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.TranslationOffset, &TranslationOffset);
afae4e7
+
afae4e7
     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
afae4e7
                             OptionIndex + StringLength;
afae4e7
     return (Rnode);
afae4e7
@@ -315,7 +321,13 @@ RsDoDwordMemoryDescriptor (
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
     UINT8                   *OptionalFields;
afae4e7
     UINT16                  StringLength = 0;
afae4e7
+    UINT16                  ResourceLength = 0;
afae4e7
     UINT32                  OptionIndex = 0;
afae4e7
+    UINT32                  Minimum = 0;
afae4e7
+    UINT32                  Maximum = 0;
afae4e7
+    UINT32                  AddressLength = 0;
afae4e7
+    UINT32                  Granularity = 0;
afae4e7
+    UINT32                  TranslationOffset = 0;
afae4e7
     UINT32                  i;
afae4e7
     BOOLEAN                 ResSourceIndex = FALSE;
afae4e7
 
afae4e7
@@ -335,11 +347,9 @@ RsDoDwordMemoryDescriptor (
afae4e7
      * optional fields present
afae4e7
      */
afae4e7
     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
afae4e7
-    Descriptor->Address32.ResourceLength = (UINT16)
afae4e7
-        (sizeof (AML_RESOURCE_ADDRESS32) -
afae4e7
+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS32) -
afae4e7
          sizeof (AML_RESOURCE_LARGE_HEADER));
afae4e7
 
afae4e7
-
afae4e7
     /* Process all child initialization nodes */
afae4e7
 
afae4e7
     for (i = 0; InitializerOp; i++)
afae4e7
@@ -388,8 +398,7 @@ RsDoDwordMemoryDescriptor (
afae4e7
 
afae4e7
         case 6: /* Address Granularity */
afae4e7
 
afae4e7
-            Descriptor->Address32.Granularity =
afae4e7
-                (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            Granularity = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
afae4e7
             GranOp = InitializerOp;
afae4e7
@@ -397,8 +406,7 @@ RsDoDwordMemoryDescriptor (
afae4e7
 
afae4e7
         case 7: /* Min Address */
afae4e7
 
afae4e7
-            Descriptor->Address32.Minimum =
afae4e7
-                (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
afae4e7
             MinOp = InitializerOp;
afae4e7
@@ -406,8 +414,7 @@ RsDoDwordMemoryDescriptor (
afae4e7
 
afae4e7
         case 8: /* Max Address */
afae4e7
 
afae4e7
-            Descriptor->Address32.Maximum =
afae4e7
-                (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
afae4e7
             MaxOp = InitializerOp;
afae4e7
@@ -415,16 +422,14 @@ RsDoDwordMemoryDescriptor (
afae4e7
 
afae4e7
         case 9: /* Translation Offset */
afae4e7
 
afae4e7
-            Descriptor->Address32.TranslationOffset =
afae4e7
-                (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            TranslationOffset = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
afae4e7
             break;
afae4e7
 
afae4e7
         case 10: /* Address Length */
afae4e7
 
afae4e7
-            Descriptor->Address32.AddressLength =
afae4e7
-                (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
afae4e7
             LengthOp = InitializerOp;
afae4e7
@@ -436,7 +441,7 @@ RsDoDwordMemoryDescriptor (
afae4e7
             {
afae4e7
                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
afae4e7
                 OptionIndex++;
afae4e7
-                Descriptor->Address32.ResourceLength++;
afae4e7
+                ResourceLength++;
afae4e7
                 ResSourceIndex = TRUE;
afae4e7
             }
afae4e7
             break;
afae4e7
@@ -448,8 +453,8 @@ RsDoDwordMemoryDescriptor (
afae4e7
             {
afae4e7
                 if (StringLength)
afae4e7
                 {
afae4e7
-                    Descriptor->Address32.ResourceLength = (UINT16)
afae4e7
-                        (Descriptor->Address32.ResourceLength + StringLength);
afae4e7
+
afae4e7
+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
afae4e7
 
afae4e7
                     strcpy ((char *)
afae4e7
                         &OptionalFields[OptionIndex],
afae4e7
@@ -510,13 +515,20 @@ RsDoDwordMemoryDescriptor (
afae4e7
     /* Validate the Min/Max/Len/Gran values */
afae4e7
 
afae4e7
     RsLargeAddressCheck (
afae4e7
-        (UINT64) Descriptor->Address32.Minimum,
afae4e7
-        (UINT64) Descriptor->Address32.Maximum,
afae4e7
-        (UINT64) Descriptor->Address32.AddressLength,
afae4e7
-        (UINT64) Descriptor->Address32.Granularity,
afae4e7
+        Minimum,
afae4e7
+        Maximum,
afae4e7
+        AddressLength,
afae4e7
+        Granularity,
afae4e7
         Descriptor->Address32.Flags,
afae4e7
         MinOp, MaxOp, LengthOp, GranOp, Op);
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address32.ResourceLength, &ResourceLength);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Minimum, &Minimum);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Maximum, &Maximum);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.AddressLength, &AddressLength);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Granularity, &Granularity);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.TranslationOffset, &TranslationOffset);
afae4e7
+
afae4e7
     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
afae4e7
                             OptionIndex + StringLength;
afae4e7
     return (Rnode);
afae4e7
@@ -551,7 +563,13 @@ RsDoDwordSpaceDescriptor (
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
     UINT8                   *OptionalFields;
afae4e7
     UINT16                  StringLength = 0;
afae4e7
+    UINT16                  ResourceLength = 0;
afae4e7
     UINT32                  OptionIndex = 0;
afae4e7
+    UINT32                  Minimum = 0;
afae4e7
+    UINT32                  Maximum = 0;
afae4e7
+    UINT32                  AddressLength = 0;
afae4e7
+    UINT32                  Granularity = 0;
afae4e7
+    UINT32                  TranslationOffset = 0;
afae4e7
     UINT32                  i;
afae4e7
     BOOLEAN                 ResSourceIndex = FALSE;
afae4e7
 
afae4e7
@@ -570,8 +588,7 @@ RsDoDwordSpaceDescriptor (
afae4e7
      * optional fields present
afae4e7
      */
afae4e7
     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS32);
afae4e7
-    Descriptor->Address32.ResourceLength = (UINT16)
afae4e7
-        (sizeof (AML_RESOURCE_ADDRESS32) -
afae4e7
+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS32) -
afae4e7
          sizeof (AML_RESOURCE_LARGE_HEADER));
afae4e7
 
afae4e7
     /* Process all child initialization nodes */
afae4e7
@@ -620,8 +637,7 @@ RsDoDwordSpaceDescriptor (
afae4e7
 
afae4e7
         case 6: /* Address Granularity */
afae4e7
 
afae4e7
-            Descriptor->Address32.Granularity =
afae4e7
-                (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            Granularity = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Granularity));
afae4e7
             GranOp = InitializerOp;
afae4e7
@@ -629,8 +645,7 @@ RsDoDwordSpaceDescriptor (
afae4e7
 
afae4e7
         case 7: /* Min Address */
afae4e7
 
afae4e7
-            Descriptor->Address32.Minimum =
afae4e7
-                (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            Minimum = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MINADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Minimum));
afae4e7
             MinOp = InitializerOp;
afae4e7
@@ -638,8 +651,7 @@ RsDoDwordSpaceDescriptor (
afae4e7
 
afae4e7
         case 8: /* Max Address */
afae4e7
 
afae4e7
-            Descriptor->Address32.Maximum =
afae4e7
-                (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            Maximum = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.Maximum));
afae4e7
             MaxOp = InitializerOp;
afae4e7
@@ -647,16 +661,14 @@ RsDoDwordSpaceDescriptor (
afae4e7
 
afae4e7
         case 9: /* Translation Offset */
afae4e7
 
afae4e7
-            Descriptor->Address32.TranslationOffset =
afae4e7
-                (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            TranslationOffset = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.TranslationOffset));
afae4e7
             break;
afae4e7
 
afae4e7
         case 10: /* Address Length */
afae4e7
 
afae4e7
-            Descriptor->Address32.AddressLength =
afae4e7
-                (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            AddressLength = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_LENGTH,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address32.AddressLength));
afae4e7
             LengthOp = InitializerOp;
afae4e7
@@ -668,7 +680,7 @@ RsDoDwordSpaceDescriptor (
afae4e7
             {
afae4e7
                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
afae4e7
                 OptionIndex++;
afae4e7
-                Descriptor->Address32.ResourceLength++;
afae4e7
+                ResourceLength++;
afae4e7
                 ResSourceIndex = TRUE;
afae4e7
             }
afae4e7
             break;
afae4e7
@@ -680,8 +692,7 @@ RsDoDwordSpaceDescriptor (
afae4e7
             {
afae4e7
                 if (StringLength)
afae4e7
                 {
afae4e7
-                    Descriptor->Address32.ResourceLength = (UINT16)
afae4e7
-                        (Descriptor->Address32.ResourceLength + StringLength);
afae4e7
+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
afae4e7
 
afae4e7
                     strcpy ((char *)
afae4e7
                         &OptionalFields[OptionIndex],
afae4e7
@@ -728,13 +739,20 @@ RsDoDwordSpaceDescriptor (
afae4e7
     /* Validate the Min/Max/Len/Gran values */
afae4e7
 
afae4e7
     RsLargeAddressCheck (
afae4e7
-        (UINT64) Descriptor->Address32.Minimum,
afae4e7
-        (UINT64) Descriptor->Address32.Maximum,
afae4e7
-        (UINT64) Descriptor->Address32.AddressLength,
afae4e7
-        (UINT64) Descriptor->Address32.Granularity,
afae4e7
+        Minimum,
afae4e7
+        Maximum,
afae4e7
+        AddressLength,
afae4e7
+        Granularity,
afae4e7
         Descriptor->Address32.Flags,
afae4e7
         MinOp, MaxOp, LengthOp, GranOp, Op);
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address32.ResourceLength, &ResourceLength);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Minimum, &Minimum);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Maximum, &Maximum);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.AddressLength, &AddressLength);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.Granularity, &Granularity);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->Address32.TranslationOffset, &TranslationOffset);
afae4e7
+
afae4e7
     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS32) +
afae4e7
                             OptionIndex + StringLength;
afae4e7
     return (Rnode);
afae4e7
diff --git a/source/compiler/aslrestype2e.c b/source/compiler/aslrestype2e.c
afae4e7
index e5fff47..d701880 100644
afae4e7
--- a/source/compiler/aslrestype2e.c
afae4e7
+++ b/source/compiler/aslrestype2e.c
afae4e7
@@ -82,6 +82,13 @@ RsDoExtendedIoDescriptor (
afae4e7
     ACPI_PARSE_OBJECT       *GranOp = NULL;
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
     UINT16                  StringLength = 0;
afae4e7
+    UINT16                  ResourceLength = 0;
afae4e7
+    UINT64                  Minimum = 0;
afae4e7
+    UINT64                  Maximum = 0;
afae4e7
+    UINT64                  AddressLength = 0;
afae4e7
+    UINT64                  Granularity = 0;
afae4e7
+    UINT64                  TranslationOffset = 0;
afae4e7
+    UINT64                  TypeSpecific = 0;
afae4e7
     UINT32                  i;
afae4e7
 
afae4e7
 
afae4e7
@@ -96,9 +103,10 @@ RsDoExtendedIoDescriptor (
afae4e7
     Descriptor->ExtAddress64.ResourceType    = ACPI_ADDRESS_TYPE_IO_RANGE;
afae4e7
     Descriptor->ExtAddress64.RevisionID      = AML_RESOURCE_EXTENDED_ADDRESS_REVISION;
afae4e7
 
afae4e7
-    Descriptor->ExtAddress64.ResourceLength  = (UINT16)
afae4e7
-        (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
afae4e7
+    ResourceLength  = (UINT16) (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
afae4e7
          sizeof (AML_RESOURCE_LARGE_HEADER));
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->ExtAddress64.ResourceLength,
afae4e7
+        &ResourceLength);
afae4e7
 
afae4e7
     /* Process all child initialization nodes */
afae4e7
 
afae4e7
@@ -141,7 +149,7 @@ RsDoExtendedIoDescriptor (
afae4e7
 
afae4e7
         case 5: /* Address Granularity */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
afae4e7
+            Granularity = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
afae4e7
             GranOp = InitializerOp;
afae4e7
@@ -149,7 +157,7 @@ RsDoExtendedIoDescriptor (
afae4e7
 
afae4e7
         case 6: /* Address Min */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
afae4e7
+            Minimum = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
afae4e7
             MinOp = InitializerOp;
afae4e7
@@ -157,7 +165,7 @@ RsDoExtendedIoDescriptor (
afae4e7
 
afae4e7
         case 7: /* Address Max */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
afae4e7
+            Maximum = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
afae4e7
             MaxOp = InitializerOp;
afae4e7
@@ -165,14 +173,14 @@ RsDoExtendedIoDescriptor (
afae4e7
 
afae4e7
         case 8: /* Translation Offset */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
afae4e7
+            TranslationOffset = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
afae4e7
             break;
afae4e7
 
afae4e7
         case 9: /* Address Length */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
afae4e7
+            AddressLength = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
afae4e7
             LengthOp = InitializerOp;
afae4e7
@@ -180,7 +188,7 @@ RsDoExtendedIoDescriptor (
afae4e7
 
afae4e7
         case 10: /* Type-Specific Attributes */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
afae4e7
+            TypeSpecific = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
afae4e7
             break;
afae4e7
@@ -216,13 +224,20 @@ RsDoExtendedIoDescriptor (
afae4e7
     /* Validate the Min/Max/Len/Gran values */
afae4e7
 
afae4e7
     RsLargeAddressCheck (
afae4e7
-        Descriptor->ExtAddress64.Minimum,
afae4e7
-        Descriptor->ExtAddress64.Maximum,
afae4e7
-        Descriptor->ExtAddress64.AddressLength,
afae4e7
-        Descriptor->ExtAddress64.Granularity,
afae4e7
+        Minimum,
afae4e7
+        Maximum,
afae4e7
+        AddressLength,
afae4e7
+        Granularity,
afae4e7
         Descriptor->ExtAddress64.Flags,
afae4e7
         MinOp, MaxOp, LengthOp, GranOp, Op);
afae4e7
 
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Minimum, &Minimum);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Maximum, &Maximum);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.AddressLength, &AddressLength);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Granularity, &Granularity);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.TranslationOffset, &TranslationOffset);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.TypeSpecific, &TypeSpecific);
afae4e7
+
afae4e7
     Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + StringLength;
afae4e7
     return (Rnode);
afae4e7
 }
afae4e7
@@ -255,6 +270,13 @@ RsDoExtendedMemoryDescriptor (
afae4e7
     ACPI_PARSE_OBJECT       *GranOp = NULL;
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
     UINT16                  StringLength = 0;
afae4e7
+    UINT16                  ResourceLength = 0;
afae4e7
+    UINT64                  Minimum = 0;
afae4e7
+    UINT64                  Maximum = 0;
afae4e7
+    UINT64                  AddressLength = 0;
afae4e7
+    UINT64                  Granularity = 0;
afae4e7
+    UINT64                  TranslationOffset = 0;
afae4e7
+    UINT64                  TypeSpecific = 0;
afae4e7
     UINT32                  i;
afae4e7
 
afae4e7
 
afae4e7
@@ -269,9 +291,10 @@ RsDoExtendedMemoryDescriptor (
afae4e7
     Descriptor->ExtAddress64.ResourceType    = ACPI_ADDRESS_TYPE_MEMORY_RANGE;
afae4e7
     Descriptor->ExtAddress64.RevisionID      = AML_RESOURCE_EXTENDED_ADDRESS_REVISION;
afae4e7
 
afae4e7
-    Descriptor->ExtAddress64.ResourceLength  = (UINT16)
afae4e7
-        (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
afae4e7
+    ResourceLength  = (UINT16) (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
afae4e7
          sizeof (AML_RESOURCE_LARGE_HEADER));
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->ExtAddress64.ResourceLength,
afae4e7
+        &ResourceLength);
afae4e7
 
afae4e7
     /* Process all child initialization nodes */
afae4e7
 
afae4e7
@@ -321,7 +344,7 @@ RsDoExtendedMemoryDescriptor (
afae4e7
 
afae4e7
         case 6: /* Address Granularity */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
afae4e7
+            Granularity = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
afae4e7
             GranOp = InitializerOp;
afae4e7
@@ -329,7 +352,7 @@ RsDoExtendedMemoryDescriptor (
afae4e7
 
afae4e7
         case 7: /* Min Address */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
afae4e7
+            Minimum = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
afae4e7
             MinOp = InitializerOp;
afae4e7
@@ -337,7 +360,7 @@ RsDoExtendedMemoryDescriptor (
afae4e7
 
afae4e7
         case 8: /* Max Address */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
afae4e7
+            Maximum = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
afae4e7
             MaxOp = InitializerOp;
afae4e7
@@ -345,14 +368,14 @@ RsDoExtendedMemoryDescriptor (
afae4e7
 
afae4e7
         case 9: /* Translation Offset */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
afae4e7
+            TranslationOffset = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
afae4e7
             break;
afae4e7
 
afae4e7
         case 10: /* Address Length */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
afae4e7
+            AddressLength = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
afae4e7
             LengthOp = InitializerOp;
afae4e7
@@ -360,7 +383,7 @@ RsDoExtendedMemoryDescriptor (
afae4e7
 
afae4e7
         case 11: /* Type-Specific Attributes */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
afae4e7
+            TypeSpecific = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
afae4e7
             break;
afae4e7
@@ -397,13 +420,20 @@ RsDoExtendedMemoryDescriptor (
afae4e7
     /* Validate the Min/Max/Len/Gran values */
afae4e7
 
afae4e7
     RsLargeAddressCheck (
afae4e7
-        Descriptor->ExtAddress64.Minimum,
afae4e7
-        Descriptor->ExtAddress64.Maximum,
afae4e7
-        Descriptor->ExtAddress64.AddressLength,
afae4e7
-        Descriptor->ExtAddress64.Granularity,
afae4e7
+        Minimum,
afae4e7
+        Maximum,
afae4e7
+        AddressLength,
afae4e7
+        Granularity,
afae4e7
         Descriptor->ExtAddress64.Flags,
afae4e7
         MinOp, MaxOp, LengthOp, GranOp, Op);
afae4e7
 
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Minimum, &Minimum);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Maximum, &Maximum);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.AddressLength, &AddressLength);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Granularity, &Granularity);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.TranslationOffset, &TranslationOffset);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.TypeSpecific, &TypeSpecific);
afae4e7
+
afae4e7
     Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + StringLength;
afae4e7
     return (Rnode);
afae4e7
 }
afae4e7
@@ -436,6 +466,13 @@ RsDoExtendedSpaceDescriptor (
afae4e7
     ACPI_PARSE_OBJECT       *GranOp = NULL;
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
     UINT16                  StringLength = 0;
afae4e7
+    UINT16                  ResourceLength = 0;
afae4e7
+    UINT64                  Minimum = 0;
afae4e7
+    UINT64                  Maximum = 0;
afae4e7
+    UINT64                  AddressLength = 0;
afae4e7
+    UINT64                  Granularity = 0;
afae4e7
+    UINT64                  TranslationOffset = 0;
afae4e7
+    UINT64                  TypeSpecific = 0;
afae4e7
     UINT32                  i;
afae4e7
 
afae4e7
 
afae4e7
@@ -449,9 +486,10 @@ RsDoExtendedSpaceDescriptor (
afae4e7
     Descriptor->ExtAddress64.DescriptorType  = ACPI_RESOURCE_NAME_EXTENDED_ADDRESS64;
afae4e7
     Descriptor->ExtAddress64.RevisionID      = AML_RESOURCE_EXTENDED_ADDRESS_REVISION;
afae4e7
 
afae4e7
-    Descriptor->ExtAddress64.ResourceLength  = (UINT16)
afae4e7
-        (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
afae4e7
+    ResourceLength  = (UINT16) (sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) -
afae4e7
          sizeof (AML_RESOURCE_LARGE_HEADER));
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->ExtAddress64.ResourceLength,
afae4e7
+        &ResourceLength);
afae4e7
 
afae4e7
     /* Process all child initialization nodes */
afae4e7
 
afae4e7
@@ -499,7 +537,7 @@ RsDoExtendedSpaceDescriptor (
afae4e7
 
afae4e7
         case 6: /* Address Granularity */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.Granularity = InitializerOp->Asl.Value.Integer;
afae4e7
+            Granularity = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Granularity));
afae4e7
             GranOp = InitializerOp;
afae4e7
@@ -507,7 +545,7 @@ RsDoExtendedSpaceDescriptor (
afae4e7
 
afae4e7
         case 7: /* Min Address */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.Minimum = InitializerOp->Asl.Value.Integer;
afae4e7
+            Minimum = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Minimum));
afae4e7
             MinOp = InitializerOp;
afae4e7
@@ -515,7 +553,7 @@ RsDoExtendedSpaceDescriptor (
afae4e7
 
afae4e7
         case 8: /* Max Address */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.Maximum = InitializerOp->Asl.Value.Integer;
afae4e7
+            Maximum = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.Maximum));
afae4e7
             MaxOp = InitializerOp;
afae4e7
@@ -523,14 +561,14 @@ RsDoExtendedSpaceDescriptor (
afae4e7
 
afae4e7
         case 9: /* Translation Offset */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.TranslationOffset = InitializerOp->Asl.Value.Integer;
afae4e7
+            TranslationOffset = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TranslationOffset));
afae4e7
             break;
afae4e7
 
afae4e7
         case 10: /* Address Length */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.AddressLength = InitializerOp->Asl.Value.Integer;
afae4e7
+            AddressLength = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.AddressLength));
afae4e7
             LengthOp = InitializerOp;
afae4e7
@@ -538,7 +576,7 @@ RsDoExtendedSpaceDescriptor (
afae4e7
 
afae4e7
         case 11: /* Type-Specific Attributes */
afae4e7
 
afae4e7
-            Descriptor->ExtAddress64.TypeSpecific = InitializerOp->Asl.Value.Integer;
afae4e7
+            TypeSpecific = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TYPESPECIFICATTRIBUTES,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (ExtAddress64.TypeSpecific));
afae4e7
             break;
afae4e7
@@ -560,13 +598,20 @@ RsDoExtendedSpaceDescriptor (
afae4e7
     /* Validate the Min/Max/Len/Gran values */
afae4e7
 
afae4e7
     RsLargeAddressCheck (
afae4e7
-        Descriptor->ExtAddress64.Minimum,
afae4e7
-        Descriptor->ExtAddress64.Maximum,
afae4e7
-        Descriptor->ExtAddress64.AddressLength,
afae4e7
-        Descriptor->ExtAddress64.Granularity,
afae4e7
+        Minimum,
afae4e7
+        Maximum,
afae4e7
+        AddressLength,
afae4e7
+        Granularity,
afae4e7
         Descriptor->ExtAddress64.Flags,
afae4e7
         MinOp, MaxOp, LengthOp, GranOp, Op);
afae4e7
 
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Minimum, &Minimum);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Maximum, &Maximum);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.AddressLength, &AddressLength);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.Granularity, &Granularity);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.TranslationOffset, &TranslationOffset);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->ExtAddress64.TypeSpecific, &TypeSpecific);
afae4e7
+
afae4e7
     Rnode->BufferLength = sizeof (AML_RESOURCE_EXTENDED_ADDRESS64) + StringLength;
afae4e7
     return (Rnode);
afae4e7
 }
afae4e7
diff --git a/source/compiler/aslrestype2q.c b/source/compiler/aslrestype2q.c
afae4e7
index 65c242a..c92d545 100644
afae4e7
--- a/source/compiler/aslrestype2q.c
afae4e7
+++ b/source/compiler/aslrestype2q.c
afae4e7
@@ -84,7 +84,13 @@ RsDoQwordIoDescriptor (
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
     UINT8                   *OptionalFields;
afae4e7
     UINT16                  StringLength = 0;
afae4e7
+    UINT16                  ResourceLength = 0;
afae4e7
     UINT32                  OptionIndex = 0;
afae4e7
+    UINT64                  Minimum = 0;
afae4e7
+    UINT64                  Maximum = 0;
afae4e7
+    UINT64                  AddressLength = 0;
afae4e7
+    UINT64                  Granularity = 0;
afae4e7
+    UINT64                  TranslationOffset = 0;
afae4e7
     UINT32                  i;
afae4e7
     BOOLEAN                 ResSourceIndex = FALSE;
afae4e7
 
afae4e7
@@ -104,8 +110,7 @@ RsDoQwordIoDescriptor (
afae4e7
      * optional fields present
afae4e7
      */
afae4e7
     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64);
afae4e7
-    Descriptor->Address64.ResourceLength = (UINT16)
afae4e7
-        (sizeof (AML_RESOURCE_ADDRESS64) -
afae4e7
+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS64) -
afae4e7
          sizeof (AML_RESOURCE_LARGE_HEADER));
afae4e7
 
afae4e7
     /* Process all child initialization nodes */
afae4e7
@@ -149,7 +154,7 @@ RsDoQwordIoDescriptor (
afae4e7
 
afae4e7
         case 5: /* Address Granularity */
afae4e7
 
afae4e7
-            Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
afae4e7
+            Granularity = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
afae4e7
             GranOp = InitializerOp;
afae4e7
@@ -157,7 +162,7 @@ RsDoQwordIoDescriptor (
afae4e7
 
afae4e7
         case 6: /* Address Min */
afae4e7
 
afae4e7
-            Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
afae4e7
+            Minimum = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
afae4e7
             MinOp = InitializerOp;
afae4e7
@@ -165,7 +170,7 @@ RsDoQwordIoDescriptor (
afae4e7
 
afae4e7
         case 7: /* Address Max */
afae4e7
 
afae4e7
-            Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
afae4e7
+            Maximum = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
afae4e7
             MaxOp = InitializerOp;
afae4e7
@@ -173,14 +178,14 @@ RsDoQwordIoDescriptor (
afae4e7
 
afae4e7
         case 8: /* Translation Offset */
afae4e7
 
afae4e7
-            Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
afae4e7
+            TranslationOffset = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateByteField (InitializerOp, ACPI_RESTAG_TRANSLATION,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
afae4e7
             break;
afae4e7
 
afae4e7
         case 9: /* Address Length */
afae4e7
 
afae4e7
-            Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
afae4e7
+            AddressLength = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
afae4e7
             LengthOp = InitializerOp;
afae4e7
@@ -192,7 +197,7 @@ RsDoQwordIoDescriptor (
afae4e7
             {
afae4e7
                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
afae4e7
                 OptionIndex++;
afae4e7
-                Descriptor->Address64.ResourceLength++;
afae4e7
+                ResourceLength++;
afae4e7
                 ResSourceIndex = TRUE;
afae4e7
             }
afae4e7
             break;
afae4e7
@@ -204,8 +209,7 @@ RsDoQwordIoDescriptor (
afae4e7
             {
afae4e7
                 if (StringLength)
afae4e7
                 {
afae4e7
-                    Descriptor->Address64.ResourceLength = (UINT16)
afae4e7
-                        (Descriptor->Address64.ResourceLength + StringLength);
afae4e7
+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
afae4e7
 
afae4e7
                     strcpy ((char *)
afae4e7
                         &OptionalFields[OptionIndex],
afae4e7
@@ -265,13 +269,20 @@ RsDoQwordIoDescriptor (
afae4e7
     /* Validate the Min/Max/Len/Gran values */
afae4e7
 
afae4e7
     RsLargeAddressCheck (
afae4e7
-        Descriptor->Address64.Minimum,
afae4e7
-        Descriptor->Address64.Maximum,
afae4e7
-        Descriptor->Address64.AddressLength,
afae4e7
-        Descriptor->Address64.Granularity,
afae4e7
+        Minimum,
afae4e7
+        Maximum,
afae4e7
+        AddressLength,
afae4e7
+        Granularity,
afae4e7
         Descriptor->Address64.Flags,
afae4e7
         MinOp, MaxOp, LengthOp, GranOp, Op);
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address64.ResourceLength, &ResourceLength);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Minimum, &Minimum);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Maximum, &Maximum);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.AddressLength, &AddressLength);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Granularity, &Granularity);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.TranslationOffset, &TranslationOffset);
afae4e7
+
afae4e7
     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) +
afae4e7
                             OptionIndex + StringLength;
afae4e7
     return (Rnode);
afae4e7
@@ -306,7 +317,13 @@ RsDoQwordMemoryDescriptor (
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
     UINT8                   *OptionalFields;
afae4e7
     UINT16                  StringLength = 0;
afae4e7
+    UINT16                  ResourceLength = 0;
afae4e7
     UINT32                  OptionIndex = 0;
afae4e7
+    UINT64                  Minimum = 0;
afae4e7
+    UINT64                  Maximum = 0;
afae4e7
+    UINT64                  AddressLength = 0;
afae4e7
+    UINT64                  Granularity = 0;
afae4e7
+    UINT64                  TranslationOffset = 0;
afae4e7
     UINT32                  i;
afae4e7
     BOOLEAN                 ResSourceIndex = FALSE;
afae4e7
 
afae4e7
@@ -326,8 +343,7 @@ RsDoQwordMemoryDescriptor (
afae4e7
      * optional fields present
afae4e7
      */
afae4e7
     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64);
afae4e7
-    Descriptor->Address64.ResourceLength = (UINT16)
afae4e7
-        (sizeof (AML_RESOURCE_ADDRESS64) -
afae4e7
+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS64) -
afae4e7
          sizeof (AML_RESOURCE_LARGE_HEADER));
afae4e7
 
afae4e7
     /* Process all child initialization nodes */
afae4e7
@@ -378,7 +394,7 @@ RsDoQwordMemoryDescriptor (
afae4e7
 
afae4e7
         case 6: /* Address Granularity */
afae4e7
 
afae4e7
-            Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
afae4e7
+            Granularity = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
afae4e7
             GranOp = InitializerOp;
afae4e7
@@ -386,7 +402,7 @@ RsDoQwordMemoryDescriptor (
afae4e7
 
afae4e7
         case 7: /* Min Address */
afae4e7
 
afae4e7
-            Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
afae4e7
+            Minimum = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
afae4e7
             MinOp = InitializerOp;
afae4e7
@@ -394,7 +410,7 @@ RsDoQwordMemoryDescriptor (
afae4e7
 
afae4e7
         case 8: /* Max Address */
afae4e7
 
afae4e7
-            Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
afae4e7
+            Maximum = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
afae4e7
             MaxOp = InitializerOp;
afae4e7
@@ -402,14 +418,14 @@ RsDoQwordMemoryDescriptor (
afae4e7
 
afae4e7
         case 9: /* Translation Offset */
afae4e7
 
afae4e7
-            Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
afae4e7
+            TranslationOffset = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
afae4e7
             break;
afae4e7
 
afae4e7
         case 10: /* Address Length */
afae4e7
 
afae4e7
-            Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
afae4e7
+            AddressLength = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
afae4e7
             LengthOp = InitializerOp;
afae4e7
@@ -421,7 +437,7 @@ RsDoQwordMemoryDescriptor (
afae4e7
             {
afae4e7
                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
afae4e7
                 OptionIndex++;
afae4e7
-                Descriptor->Address64.ResourceLength++;
afae4e7
+                ResourceLength++;
afae4e7
                 ResSourceIndex = TRUE;
afae4e7
             }
afae4e7
             break;
afae4e7
@@ -433,8 +449,7 @@ RsDoQwordMemoryDescriptor (
afae4e7
             {
afae4e7
                 if (StringLength)
afae4e7
                 {
afae4e7
-                    Descriptor->Address64.ResourceLength = (UINT16)
afae4e7
-                        (Descriptor->Address64.ResourceLength + StringLength);
afae4e7
+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
afae4e7
 
afae4e7
                     strcpy ((char *)
afae4e7
                         &OptionalFields[OptionIndex],
afae4e7
@@ -495,13 +510,20 @@ RsDoQwordMemoryDescriptor (
afae4e7
     /* Validate the Min/Max/Len/Gran values */
afae4e7
 
afae4e7
     RsLargeAddressCheck (
afae4e7
-        Descriptor->Address64.Minimum,
afae4e7
-        Descriptor->Address64.Maximum,
afae4e7
-        Descriptor->Address64.AddressLength,
afae4e7
-        Descriptor->Address64.Granularity,
afae4e7
+        Minimum,
afae4e7
+        Maximum,
afae4e7
+        AddressLength,
afae4e7
+        Granularity,
afae4e7
         Descriptor->Address64.Flags,
afae4e7
         MinOp, MaxOp, LengthOp, GranOp, Op);
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address64.ResourceLength, &ResourceLength);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Minimum, &Minimum);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Maximum, &Maximum);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.AddressLength, &AddressLength);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Granularity, &Granularity);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.TranslationOffset, &TranslationOffset);
afae4e7
+
afae4e7
     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) +
afae4e7
                             OptionIndex + StringLength;
afae4e7
     return (Rnode);
afae4e7
@@ -536,8 +558,14 @@ RsDoQwordSpaceDescriptor (
afae4e7
     ASL_RESOURCE_NODE       *Rnode;
afae4e7
     UINT8                   *OptionalFields;
afae4e7
     UINT16                  StringLength = 0;
afae4e7
+    UINT16                  ResourceLength = 0;
afae4e7
     UINT32                  OptionIndex = 0;
afae4e7
     UINT32                  i;
afae4e7
+    UINT64                  Minimum = 0;
afae4e7
+    UINT64                  Maximum = 0;
afae4e7
+    UINT64                  AddressLength = 0;
afae4e7
+    UINT64                  Granularity = 0;
afae4e7
+    UINT64                  TranslationOffset = 0;
afae4e7
     BOOLEAN                 ResSourceIndex = FALSE;
afae4e7
 
afae4e7
 
afae4e7
@@ -555,8 +583,7 @@ RsDoQwordSpaceDescriptor (
afae4e7
      * optional fields present
afae4e7
      */
afae4e7
     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS64);
afae4e7
-    Descriptor->Address64.ResourceLength = (UINT16)
afae4e7
-        (sizeof (AML_RESOURCE_ADDRESS64) -
afae4e7
+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS64) -
afae4e7
          sizeof (AML_RESOURCE_LARGE_HEADER));
afae4e7
 
afae4e7
     /* Process all child initialization nodes */
afae4e7
@@ -605,7 +632,7 @@ RsDoQwordSpaceDescriptor (
afae4e7
 
afae4e7
         case 6: /* Address Granularity */
afae4e7
 
afae4e7
-            Descriptor->Address64.Granularity = InitializerOp->Asl.Value.Integer;
afae4e7
+            Granularity = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Granularity));
afae4e7
             GranOp = InitializerOp;
afae4e7
@@ -613,7 +640,7 @@ RsDoQwordSpaceDescriptor (
afae4e7
 
afae4e7
         case 7: /* Min Address */
afae4e7
 
afae4e7
-            Descriptor->Address64.Minimum = InitializerOp->Asl.Value.Integer;
afae4e7
+            Minimum = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MINADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Minimum));
afae4e7
             MinOp = InitializerOp;
afae4e7
@@ -621,7 +648,7 @@ RsDoQwordSpaceDescriptor (
afae4e7
 
afae4e7
         case 8: /* Max Address */
afae4e7
 
afae4e7
-            Descriptor->Address64.Maximum = InitializerOp->Asl.Value.Integer;
afae4e7
+            Maximum = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_MAXADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.Maximum));
afae4e7
             MaxOp = InitializerOp;
afae4e7
@@ -629,14 +656,14 @@ RsDoQwordSpaceDescriptor (
afae4e7
 
afae4e7
         case 9: /* Translation Offset */
afae4e7
 
afae4e7
-            Descriptor->Address64.TranslationOffset = InitializerOp->Asl.Value.Integer;
afae4e7
+            TranslationOffset = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.TranslationOffset));
afae4e7
             break;
afae4e7
 
afae4e7
         case 10: /* Address Length */
afae4e7
 
afae4e7
-            Descriptor->Address64.AddressLength = InitializerOp->Asl.Value.Integer;
afae4e7
+            AddressLength = InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateQwordField (InitializerOp, ACPI_RESTAG_LENGTH,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address64.AddressLength));
afae4e7
             LengthOp = InitializerOp;
afae4e7
@@ -648,7 +675,7 @@ RsDoQwordSpaceDescriptor (
afae4e7
             {
afae4e7
                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
afae4e7
                 OptionIndex++;
afae4e7
-                Descriptor->Address64.ResourceLength++;
afae4e7
+                ResourceLength++;
afae4e7
                 ResSourceIndex = TRUE;
afae4e7
             }
afae4e7
             break;
afae4e7
@@ -660,8 +687,7 @@ RsDoQwordSpaceDescriptor (
afae4e7
             {
afae4e7
                 if (StringLength)
afae4e7
                 {
afae4e7
-                    Descriptor->Address64.ResourceLength = (UINT16)
afae4e7
-                        (Descriptor->Address64.ResourceLength + StringLength);
afae4e7
+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
afae4e7
 
afae4e7
                     strcpy ((char *)
afae4e7
                         &OptionalFields[OptionIndex],
afae4e7
@@ -707,13 +733,20 @@ RsDoQwordSpaceDescriptor (
afae4e7
     /* Validate the Min/Max/Len/Gran values */
afae4e7
 
afae4e7
     RsLargeAddressCheck (
afae4e7
-        Descriptor->Address64.Minimum,
afae4e7
-        Descriptor->Address64.Maximum,
afae4e7
-        Descriptor->Address64.AddressLength,
afae4e7
-        Descriptor->Address64.Granularity,
afae4e7
+        Minimum,
afae4e7
+        Maximum,
afae4e7
+        AddressLength,
afae4e7
+        Granularity,
afae4e7
         Descriptor->Address64.Flags,
afae4e7
         MinOp, MaxOp, LengthOp, GranOp, Op);
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address64.ResourceLength, &ResourceLength);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Minimum, &Minimum);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Maximum, &Maximum);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.AddressLength, &AddressLength);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.Granularity, &Granularity);
afae4e7
+    ACPI_MOVE_64_TO_64(&Descriptor->Address64.TranslationOffset, &TranslationOffset);
afae4e7
+
afae4e7
     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS64) +
afae4e7
                             OptionIndex + StringLength;
afae4e7
     return (Rnode);
afae4e7
diff --git a/source/compiler/aslrestype2s.c b/source/compiler/aslrestype2s.c
afae4e7
index a9d24cd..4d9c7db 100644
afae4e7
--- a/source/compiler/aslrestype2s.c
afae4e7
+++ b/source/compiler/aslrestype2s.c
afae4e7
@@ -293,6 +293,9 @@ RsDoGpioIntDescriptor (
afae4e7
     UINT16                  VendorLength;
afae4e7
     UINT16                  InterruptLength;
afae4e7
     UINT16                  DescriptorSize;
afae4e7
+    UINT16                  IntFlags = 0;
afae4e7
+    UINT16                  DebounceTimeout = 0;
afae4e7
+    UINT16                  Flags = 0;
afae4e7
     UINT32                  i;
afae4e7
 
afae4e7
 
afae4e7
@@ -348,21 +351,21 @@ RsDoGpioIntDescriptor (
afae4e7
         {
afae4e7
         case 0: /* Interrupt Mode - edge/level [Flag] (_MOD) */
afae4e7
 
afae4e7
-            RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 0, 0);
afae4e7
+            RsSetFlagBits16 (&IntFlags, InitializerOp, 0, 0);
afae4e7
             RsCreateBitField (InitializerOp, ACPI_RESTAG_MODE,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 0);
afae4e7
             break;
afae4e7
 
afae4e7
         case 1: /* Interrupt Polarity - Active high/low [Flags] (_POL) */
afae4e7
 
afae4e7
-            RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 1, 0);
afae4e7
+            RsSetFlagBits16 (&IntFlags, InitializerOp, 1, 0);
afae4e7
             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_POLARITY,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 1, 2);
afae4e7
             break;
afae4e7
 
afae4e7
         case 2: /* Share Type - Default: exclusive (0) [Flags] (_SHR) */
afae4e7
 
afae4e7
-            RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 3, 0);
afae4e7
+            RsSetFlagBits16 (&IntFlags, InitializerOp, 3, 0);
afae4e7
             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 3, 2);
afae4e7
             break;
afae4e7
@@ -376,7 +379,7 @@ RsDoGpioIntDescriptor (
afae4e7
 
afae4e7
         case 4: /* Debounce Timeout [WORD] (_DBT) */
afae4e7
 
afae4e7
-            Descriptor->Gpio.DebounceTimeout = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            DebounceTimeout = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_DEBOUNCETIME,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.DebounceTimeout));
afae4e7
             break;
afae4e7
@@ -402,7 +405,7 @@ RsDoGpioIntDescriptor (
afae4e7
 
afae4e7
         case 7: /* Resource Usage (consumer/producer) */
afae4e7
 
afae4e7
-            RsSetFlagBits16 (&Descriptor->Gpio.Flags, InitializerOp, 0, 1);
afae4e7
+            RsSetFlagBits16 (&Flags, InitializerOp, 0, 1);
afae4e7
             break;
afae4e7
 
afae4e7
         case 8: /* Resource Tag (Descriptor Name) */
afae4e7
@@ -466,6 +469,10 @@ RsDoGpioIntDescriptor (
afae4e7
         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
afae4e7
     }
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.IntFlags, &IntFlags);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.DebounceTimeout, &DebounceTimeout);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.Flags, &Flags);
afae4e7
+
afae4e7
     return (Rnode);
afae4e7
 }
afae4e7
 
afae4e7
@@ -499,6 +506,10 @@ RsDoGpioIoDescriptor (
afae4e7
     UINT16                  VendorLength;
afae4e7
     UINT16                  InterruptLength;
afae4e7
     UINT16                  DescriptorSize;
afae4e7
+    UINT16                  IntFlags = 0;
afae4e7
+    UINT16                  DebounceTimeout = 0;
afae4e7
+    UINT16                  DriveStrength = 0;
afae4e7
+    UINT16                  Flags = 0;
afae4e7
     UINT32                  i;
afae4e7
 
afae4e7
 
afae4e7
@@ -554,7 +565,7 @@ RsDoGpioIoDescriptor (
afae4e7
         {
afae4e7
         case 0: /* Share Type [Flags] (_SHR) */
afae4e7
 
afae4e7
-            RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 3, 0);
afae4e7
+            RsSetFlagBits16 (&IntFlags, InitializerOp, 3, 0);
afae4e7
             RsCreateBitField (InitializerOp, ACPI_RESTAG_INTERRUPTSHARE,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 3);
afae4e7
             break;
afae4e7
@@ -568,21 +579,21 @@ RsDoGpioIoDescriptor (
afae4e7
 
afae4e7
         case 2: /* Debounce Timeout [WORD] (_DBT) */
afae4e7
 
afae4e7
-            Descriptor->Gpio.DebounceTimeout = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            DebounceTimeout = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_DEBOUNCETIME,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.DebounceTimeout));
afae4e7
             break;
afae4e7
 
afae4e7
         case 3: /* Drive Strength [WORD] (_DRS) */
afae4e7
 
afae4e7
-            Descriptor->Gpio.DriveStrength = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            DriveStrength = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_DRIVESTRENGTH,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.DriveStrength));
afae4e7
             break;
afae4e7
 
afae4e7
         case 4: /* I/O Restriction [Flag] (_IOR) */
afae4e7
 
afae4e7
-            RsSetFlagBits16 (&Descriptor->Gpio.IntFlags, InitializerOp, 0, 0);
afae4e7
+            RsSetFlagBits16 (&IntFlags, InitializerOp, 0, 0);
afae4e7
             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_IORESTRICTION,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Gpio.IntFlags), 0, 2);
afae4e7
             break;
afae4e7
@@ -608,7 +619,7 @@ RsDoGpioIoDescriptor (
afae4e7
 
afae4e7
         case 7: /* Resource Usage (consumer/producer) */
afae4e7
 
afae4e7
-            RsSetFlagBits16 (&Descriptor->Gpio.Flags, InitializerOp, 0, 1);
afae4e7
+            RsSetFlagBits16 (&Flags, InitializerOp, 0, 1);
afae4e7
             break;
afae4e7
 
afae4e7
         case 8: /* Resource Tag (Descriptor Name) */
afae4e7
@@ -671,6 +683,11 @@ RsDoGpioIoDescriptor (
afae4e7
         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
afae4e7
     }
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.IntFlags, &IntFlags);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.DebounceTimeout, &DebounceTimeout);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.DriveStrength, &DriveStrength);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Gpio.Flags, &Flags);
afae4e7
+
afae4e7
     return (Rnode);
afae4e7
 }
afae4e7
 
afae4e7
@@ -702,6 +719,9 @@ RsDoI2cSerialBusDescriptor (
afae4e7
     UINT16                  ResSourceLength;
afae4e7
     UINT16                  VendorLength;
afae4e7
     UINT16                  DescriptorSize;
afae4e7
+    UINT16                  SlaveAddress = 0;
afae4e7
+    UINT32                  ConnectionSpeed = 0;
afae4e7
+    UINT16                  TypeSpecificFlags = 0;
afae4e7
     UINT32                  i;
afae4e7
 
afae4e7
 
afae4e7
@@ -749,7 +769,7 @@ RsDoI2cSerialBusDescriptor (
afae4e7
         {
afae4e7
         case 0: /* Slave Address [WORD] (_ADR) */
afae4e7
 
afae4e7
-            Descriptor->I2cSerialBus.SlaveAddress = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            SlaveAddress = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_ADDRESS,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.SlaveAddress));
afae4e7
             break;
afae4e7
@@ -763,14 +783,14 @@ RsDoI2cSerialBusDescriptor (
afae4e7
 
afae4e7
         case 2: /* Connection Speed [DWORD] (_SPE) */
afae4e7
 
afae4e7
-            Descriptor->I2cSerialBus.ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_SPEED,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.ConnectionSpeed));
afae4e7
             break;
afae4e7
 
afae4e7
         case 3: /* Addressing Mode [Flag] (_MOD) */
afae4e7
 
afae4e7
-            RsSetFlagBits16 (&Descriptor->I2cSerialBus.TypeSpecificFlags, InitializerOp, 0, 0);
afae4e7
+            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 0, 0);
afae4e7
             RsCreateBitField (InitializerOp, ACPI_RESTAG_MODE,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (I2cSerialBus.TypeSpecificFlags), 0);
afae4e7
             break;
afae4e7
@@ -818,6 +837,9 @@ RsDoI2cSerialBusDescriptor (
afae4e7
         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
afae4e7
     }
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->I2cSerialBus.SlaveAddress, &SlaveAddress);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->I2cSerialBus.ConnectionSpeed, &ConnectionSpeed);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->I2cSerialBus.TypeSpecificFlags, &TypeSpecificFlags);
afae4e7
     return (Rnode);
afae4e7
 }
afae4e7
 
afae4e7
@@ -849,6 +871,9 @@ RsDoSpiSerialBusDescriptor (
afae4e7
     UINT16                  ResSourceLength;
afae4e7
     UINT16                  VendorLength;
afae4e7
     UINT16                  DescriptorSize;
afae4e7
+    UINT16                  DeviceSelection = 0;
afae4e7
+    UINT32                  ConnectionSpeed = 0;
afae4e7
+    UINT16                  TypeSpecificFlags = 0;
afae4e7
     UINT32                  i;
afae4e7
 
afae4e7
 
afae4e7
@@ -896,21 +921,21 @@ RsDoSpiSerialBusDescriptor (
afae4e7
         {
afae4e7
         case 0: /* Device Selection [WORD] (_ADR) */
afae4e7
 
afae4e7
-            Descriptor->SpiSerialBus.DeviceSelection = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            DeviceSelection = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_ADDRESS,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.DeviceSelection));
afae4e7
             break;
afae4e7
 
afae4e7
         case 1: /* Device Polarity [Flag] (_DPL) */
afae4e7
 
afae4e7
-            RsSetFlagBits16 (&Descriptor->SpiSerialBus.TypeSpecificFlags, InitializerOp, 1, 0);
afae4e7
+            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 1, 0);
afae4e7
             RsCreateBitField (InitializerOp, ACPI_RESTAG_DEVICEPOLARITY,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.TypeSpecificFlags), 1);
afae4e7
             break;
afae4e7
 
afae4e7
         case 2: /* Wire Mode [Flag] (_MOD) */
afae4e7
 
afae4e7
-            RsSetFlagBits16 (&Descriptor->SpiSerialBus.TypeSpecificFlags, InitializerOp, 0, 0);
afae4e7
+            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 0, 0);
afae4e7
             RsCreateBitField (InitializerOp, ACPI_RESTAG_MODE,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.TypeSpecificFlags), 0);
afae4e7
             break;
afae4e7
@@ -931,7 +956,7 @@ RsDoSpiSerialBusDescriptor (
afae4e7
 
afae4e7
         case 5: /* Connection Speed [DWORD] (_SPE) */
afae4e7
 
afae4e7
-            Descriptor->SpiSerialBus.ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            ConnectionSpeed = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_SPEED,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (SpiSerialBus.ConnectionSpeed));
afae4e7
             break;
afae4e7
@@ -993,6 +1017,10 @@ RsDoSpiSerialBusDescriptor (
afae4e7
         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
afae4e7
     }
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->SpiSerialBus.DeviceSelection, &DeviceSelection);
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->SpiSerialBus.ConnectionSpeed, &ConnectionSpeed);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->SpiSerialBus.TypeSpecificFlags, &TypeSpecificFlags);
afae4e7
+
afae4e7
     return (Rnode);
afae4e7
 }
afae4e7
 
afae4e7
@@ -1024,6 +1052,10 @@ RsDoUartSerialBusDescriptor (
afae4e7
     UINT16                  ResSourceLength;
afae4e7
     UINT16                  VendorLength;
afae4e7
     UINT16                  DescriptorSize;
afae4e7
+    UINT32                  DefaultBaudRate = 0;
afae4e7
+    UINT16                  TypeSpecificFlags = 0;
afae4e7
+    UINT16                  RxFifoSize = 0;
afae4e7
+    UINT16                  TxFifoSize = 0;
afae4e7
     UINT32                  i;
afae4e7
 
afae4e7
 
afae4e7
@@ -1071,21 +1103,21 @@ RsDoUartSerialBusDescriptor (
afae4e7
         {
afae4e7
         case 0: /* Connection Speed (Baud Rate) [DWORD] (_SPE) */
afae4e7
 
afae4e7
-            Descriptor->UartSerialBus.DefaultBaudRate = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
+            DefaultBaudRate = (UINT32) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateDwordField (InitializerOp, ACPI_RESTAG_SPEED,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.DefaultBaudRate));
afae4e7
             break;
afae4e7
 
afae4e7
         case 1: /* Bits Per Byte [Flags] (_LEN) */
afae4e7
 
afae4e7
-            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 4, 3);
afae4e7
+            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 4, 3);
afae4e7
             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_LENGTH,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 4, 3);
afae4e7
             break;
afae4e7
 
afae4e7
         case 2: /* Stop Bits [Flags] (_STB) */
afae4e7
 
afae4e7
-            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 2, 1);
afae4e7
+            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 2, 1);
afae4e7
             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_STOPBITS,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 2, 2);
afae4e7
             break;
afae4e7
@@ -1099,7 +1131,7 @@ RsDoUartSerialBusDescriptor (
afae4e7
 
afae4e7
         case 4: /* Endianness [Flag] (_END) */
afae4e7
 
afae4e7
-            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 7, 0);
afae4e7
+            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 7, 0);
afae4e7
             RsCreateBitField (InitializerOp, ACPI_RESTAG_ENDIANNESS,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 7);
afae4e7
             break;
afae4e7
@@ -1113,21 +1145,21 @@ RsDoUartSerialBusDescriptor (
afae4e7
 
afae4e7
         case 6: /* Flow Control [Flags] (_FLC) */
afae4e7
 
afae4e7
-            RsSetFlagBits16 (&Descriptor->UartSerialBus.TypeSpecificFlags, InitializerOp, 0, 0);
afae4e7
+            RsSetFlagBits16 (&TypeSpecificFlags, InitializerOp, 0, 0);
afae4e7
             RsCreateMultiBitField (InitializerOp, ACPI_RESTAG_FLOWCONTROL,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TypeSpecificFlags), 0, 2);
afae4e7
             break;
afae4e7
 
afae4e7
         case 7: /* Rx Buffer Size [WORD] (_RXL) */
afae4e7
 
afae4e7
-            Descriptor->UartSerialBus.RxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            RxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH_RX,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.RxFifoSize));
afae4e7
             break;
afae4e7
 
afae4e7
         case 8: /* Tx Buffer Size [WORD] (_TXL) */
afae4e7
 
afae4e7
-            Descriptor->UartSerialBus.TxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            TxFifoSize = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH_TX,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (UartSerialBus.TxFifoSize));
afae4e7
             break;
afae4e7
@@ -1185,5 +1216,10 @@ RsDoUartSerialBusDescriptor (
afae4e7
         InitializerOp = RsCompleteNodeAndGetNext (InitializerOp);
afae4e7
     }
afae4e7
 
afae4e7
+    ACPI_MOVE_32_TO_32(&Descriptor->UartSerialBus.DefaultBaudRate, &DefaultBaudRate);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->UartSerialBus.TypeSpecificFlags, &TypeSpecificFlags);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->UartSerialBus.RxFifoSize, &RxFifoSize);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->UartSerialBus.TxFifoSize, &TxFifoSize);
afae4e7
+
afae4e7
     return (Rnode);
afae4e7
 }
afae4e7
diff --git a/source/compiler/aslrestype2w.c b/source/compiler/aslrestype2w.c
afae4e7
index 79d7bcc..77acbcc 100644
afae4e7
--- a/source/compiler/aslrestype2w.c
afae4e7
+++ b/source/compiler/aslrestype2w.c
afae4e7
@@ -85,6 +85,12 @@ RsDoWordIoDescriptor (
afae4e7
     UINT8                   *OptionalFields;
afae4e7
     UINT16                  StringLength = 0;
afae4e7
     UINT32                  OptionIndex = 0;
afae4e7
+    UINT16                  ResourceLength = 0;
afae4e7
+    UINT16                  Minimum = 0;
afae4e7
+    UINT16                  Maximum = 0;
afae4e7
+    UINT16                  AddressLength = 0;
afae4e7
+    UINT16                  Granularity = 0;
afae4e7
+    UINT16                  TranslationOffset = 0;
afae4e7
     UINT32                  i;
afae4e7
     BOOLEAN                 ResSourceIndex = FALSE;
afae4e7
 
afae4e7
@@ -104,8 +110,7 @@ RsDoWordIoDescriptor (
afae4e7
      * optional fields present
afae4e7
      */
afae4e7
     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS16);
afae4e7
-    Descriptor->Address16.ResourceLength = (UINT16)
afae4e7
-        (sizeof (AML_RESOURCE_ADDRESS16) -
afae4e7
+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS16) -
afae4e7
          sizeof (AML_RESOURCE_LARGE_HEADER));
afae4e7
 
afae4e7
     /* Process all child initialization nodes */
afae4e7
@@ -149,7 +154,7 @@ RsDoWordIoDescriptor (
afae4e7
 
afae4e7
         case 5: /* Address Granularity */
afae4e7
 
afae4e7
-            Descriptor->Address16.Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
afae4e7
             GranOp = InitializerOp;
afae4e7
@@ -157,7 +162,7 @@ RsDoWordIoDescriptor (
afae4e7
 
afae4e7
         case 6: /* Address Min */
afae4e7
 
afae4e7
-            Descriptor->Address16.Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
afae4e7
             MinOp = InitializerOp;
afae4e7
@@ -165,7 +170,7 @@ RsDoWordIoDescriptor (
afae4e7
 
afae4e7
         case 7: /* Address Max */
afae4e7
 
afae4e7
-            Descriptor->Address16.Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
afae4e7
             MaxOp = InitializerOp;
afae4e7
@@ -173,14 +178,14 @@ RsDoWordIoDescriptor (
afae4e7
 
afae4e7
         case 8: /* Translation Offset */
afae4e7
 
afae4e7
-            Descriptor->Address16.TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
afae4e7
             break;
afae4e7
 
afae4e7
         case 9: /* Address Length */
afae4e7
 
afae4e7
-            Descriptor->Address16.AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
afae4e7
                  CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
afae4e7
             LengthOp = InitializerOp;
afae4e7
@@ -192,7 +197,7 @@ RsDoWordIoDescriptor (
afae4e7
             {
afae4e7
                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
afae4e7
                 OptionIndex++;
afae4e7
-                Descriptor->Address16.ResourceLength++;
afae4e7
+                ResourceLength++;
afae4e7
                 ResSourceIndex = TRUE;
afae4e7
             }
afae4e7
             break;
afae4e7
@@ -204,8 +209,7 @@ RsDoWordIoDescriptor (
afae4e7
             {
afae4e7
                 if (StringLength)
afae4e7
                 {
afae4e7
-                    Descriptor->Address16.ResourceLength = (UINT16)
afae4e7
-                        (Descriptor->Address16.ResourceLength + StringLength);
afae4e7
+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
afae4e7
 
afae4e7
                     strcpy ((char *)
afae4e7
                         &OptionalFields[OptionIndex],
afae4e7
@@ -265,13 +269,20 @@ RsDoWordIoDescriptor (
afae4e7
     /* Validate the Min/Max/Len/Gran values */
afae4e7
 
afae4e7
     RsLargeAddressCheck (
afae4e7
-        (UINT64) Descriptor->Address16.Minimum,
afae4e7
-        (UINT64) Descriptor->Address16.Maximum,
afae4e7
-        (UINT64) Descriptor->Address16.AddressLength,
afae4e7
-        (UINT64) Descriptor->Address16.Granularity,
afae4e7
+        Minimum,
afae4e7
+        Maximum,
afae4e7
+        AddressLength,
afae4e7
+        Granularity,
afae4e7
         Descriptor->Address16.Flags,
afae4e7
         MinOp, MaxOp, LengthOp, GranOp, Op);
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.ResourceLength, &ResourceLength);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Minimum, &Minimum);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Maximum, &Maximum);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.AddressLength, &AddressLength);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Granularity, &Granularity);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.TranslationOffset, &TranslationOffset);
afae4e7
+
afae4e7
     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
afae4e7
                             OptionIndex + StringLength;
afae4e7
     return (Rnode);
afae4e7
@@ -307,6 +318,12 @@ RsDoWordBusNumberDescriptor (
afae4e7
     UINT8                   *OptionalFields;
afae4e7
     UINT16                  StringLength = 0;
afae4e7
     UINT32                  OptionIndex = 0;
afae4e7
+    UINT16                  ResourceLength = 0;
afae4e7
+    UINT16                  Minimum = 0;
afae4e7
+    UINT16                  Maximum = 0;
afae4e7
+    UINT16                  AddressLength = 0;
afae4e7
+    UINT16                  Granularity = 0;
afae4e7
+    UINT16                  TranslationOffset = 0;
afae4e7
     UINT32                  i;
afae4e7
     BOOLEAN                 ResSourceIndex = FALSE;
afae4e7
 
afae4e7
@@ -326,8 +343,7 @@ RsDoWordBusNumberDescriptor (
afae4e7
      * optional fields present
afae4e7
      */
afae4e7
     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS16);
afae4e7
-    Descriptor->Address16.ResourceLength = (UINT16)
afae4e7
-        (sizeof (AML_RESOURCE_ADDRESS16) -
afae4e7
+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS16) -
afae4e7
          sizeof (AML_RESOURCE_LARGE_HEADER));
afae4e7
 
afae4e7
     /* Process all child initialization nodes */
afae4e7
@@ -364,8 +380,7 @@ RsDoWordBusNumberDescriptor (
afae4e7
 
afae4e7
         case 4: /* Address Granularity */
afae4e7
 
afae4e7
-            Descriptor->Address16.Granularity =
afae4e7
-                (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
afae4e7
             GranOp = InitializerOp;
afae4e7
@@ -373,8 +388,7 @@ RsDoWordBusNumberDescriptor (
afae4e7
 
afae4e7
         case 5: /* Min Address */
afae4e7
 
afae4e7
-            Descriptor->Address16.Minimum =
afae4e7
-                (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
afae4e7
             MinOp = InitializerOp;
afae4e7
@@ -382,8 +396,7 @@ RsDoWordBusNumberDescriptor (
afae4e7
 
afae4e7
         case 6: /* Max Address */
afae4e7
 
afae4e7
-            Descriptor->Address16.Maximum =
afae4e7
-                (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
afae4e7
             MaxOp = InitializerOp;
afae4e7
@@ -391,16 +404,14 @@ RsDoWordBusNumberDescriptor (
afae4e7
 
afae4e7
         case 7: /* Translation Offset */
afae4e7
 
afae4e7
-            Descriptor->Address16.TranslationOffset =
afae4e7
-                (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
afae4e7
             break;
afae4e7
 
afae4e7
         case 8: /* Address Length */
afae4e7
 
afae4e7
-            Descriptor->Address16.AddressLength =
afae4e7
-                (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
afae4e7
                  CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
afae4e7
             LengthOp = InitializerOp;
afae4e7
@@ -412,7 +423,7 @@ RsDoWordBusNumberDescriptor (
afae4e7
             {
afae4e7
                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
afae4e7
                 OptionIndex++;
afae4e7
-                Descriptor->Address16.ResourceLength++;
afae4e7
+                ResourceLength++;
afae4e7
                 ResSourceIndex = TRUE;
afae4e7
             }
afae4e7
             break;
afae4e7
@@ -424,8 +435,7 @@ RsDoWordBusNumberDescriptor (
afae4e7
             {
afae4e7
                 if (StringLength)
afae4e7
                 {
afae4e7
-                    Descriptor->Address16.ResourceLength = (UINT16)
afae4e7
-                        (Descriptor->Address16.ResourceLength + StringLength);
afae4e7
+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
afae4e7
 
afae4e7
                     strcpy ((char *)
afae4e7
                         &OptionalFields[OptionIndex],
afae4e7
@@ -471,13 +481,20 @@ RsDoWordBusNumberDescriptor (
afae4e7
     /* Validate the Min/Max/Len/Gran values */
afae4e7
 
afae4e7
     RsLargeAddressCheck (
afae4e7
-        (UINT64) Descriptor->Address16.Minimum,
afae4e7
-        (UINT64) Descriptor->Address16.Maximum,
afae4e7
-        (UINT64) Descriptor->Address16.AddressLength,
afae4e7
-        (UINT64) Descriptor->Address16.Granularity,
afae4e7
+        Minimum,
afae4e7
+        Maximum,
afae4e7
+        AddressLength,
afae4e7
+        Granularity,
afae4e7
         Descriptor->Address16.Flags,
afae4e7
         MinOp, MaxOp, LengthOp, GranOp, Op);
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.ResourceLength, &ResourceLength);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Minimum, &Minimum);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Maximum, &Maximum);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.AddressLength, &AddressLength);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Granularity, &Granularity);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.TranslationOffset, &TranslationOffset);
afae4e7
+
afae4e7
     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
afae4e7
                             OptionIndex + StringLength;
afae4e7
     return (Rnode);
afae4e7
@@ -513,6 +530,12 @@ RsDoWordSpaceDescriptor (
afae4e7
     UINT8                   *OptionalFields;
afae4e7
     UINT16                  StringLength = 0;
afae4e7
     UINT32                  OptionIndex = 0;
afae4e7
+    UINT16                  Minimum = 0;
afae4e7
+    UINT16                  Maximum = 0;
afae4e7
+    UINT16                  AddressLength = 0;
afae4e7
+    UINT16                  Granularity = 0;
afae4e7
+    UINT16                  TranslationOffset = 0;
afae4e7
+    UINT16                  ResourceLength = 0;
afae4e7
     UINT32                  i;
afae4e7
     BOOLEAN                 ResSourceIndex = FALSE;
afae4e7
 
afae4e7
@@ -531,8 +554,7 @@ RsDoWordSpaceDescriptor (
afae4e7
      * optional fields present
afae4e7
      */
afae4e7
     OptionalFields = ((UINT8 *) Descriptor) + sizeof (AML_RESOURCE_ADDRESS16);
afae4e7
-    Descriptor->Address16.ResourceLength = (UINT16)
afae4e7
-        (sizeof (AML_RESOURCE_ADDRESS16) -
afae4e7
+    ResourceLength = (UINT16) (sizeof (AML_RESOURCE_ADDRESS16) -
afae4e7
          sizeof (AML_RESOURCE_LARGE_HEADER));
afae4e7
 
afae4e7
     /* Process all child initialization nodes */
afae4e7
@@ -581,8 +603,7 @@ RsDoWordSpaceDescriptor (
afae4e7
 
afae4e7
         case 6: /* Address Granularity */
afae4e7
 
afae4e7
-            Descriptor->Address16.Granularity =
afae4e7
-                (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            Granularity = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_GRANULARITY,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Granularity));
afae4e7
             GranOp = InitializerOp;
afae4e7
@@ -590,8 +611,7 @@ RsDoWordSpaceDescriptor (
afae4e7
 
afae4e7
         case 7: /* Min Address */
afae4e7
 
afae4e7
-            Descriptor->Address16.Minimum =
afae4e7
-                (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            Minimum = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MINADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Minimum));
afae4e7
             MinOp = InitializerOp;
afae4e7
@@ -599,8 +619,7 @@ RsDoWordSpaceDescriptor (
afae4e7
 
afae4e7
         case 8: /* Max Address */
afae4e7
 
afae4e7
-            Descriptor->Address16.Maximum =
afae4e7
-                (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            Maximum = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_MAXADDR,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.Maximum));
afae4e7
             MaxOp = InitializerOp;
afae4e7
@@ -608,16 +627,14 @@ RsDoWordSpaceDescriptor (
afae4e7
 
afae4e7
         case 9: /* Translation Offset */
afae4e7
 
afae4e7
-            Descriptor->Address16.TranslationOffset =
afae4e7
-                (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            TranslationOffset = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_TRANSLATION,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.TranslationOffset));
afae4e7
             break;
afae4e7
 
afae4e7
         case 10: /* Address Length */
afae4e7
 
afae4e7
-            Descriptor->Address16.AddressLength =
afae4e7
-                (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
+            AddressLength = (UINT16) InitializerOp->Asl.Value.Integer;
afae4e7
             RsCreateWordField (InitializerOp, ACPI_RESTAG_LENGTH,
afae4e7
                 CurrentByteOffset + ASL_RESDESC_OFFSET (Address16.AddressLength));
afae4e7
             LengthOp = InitializerOp;
afae4e7
@@ -629,7 +646,7 @@ RsDoWordSpaceDescriptor (
afae4e7
             {
afae4e7
                 OptionalFields[0] = (UINT8) InitializerOp->Asl.Value.Integer;
afae4e7
                 OptionIndex++;
afae4e7
-                Descriptor->Address16.ResourceLength++;
afae4e7
+                ResourceLength++;
afae4e7
                 ResSourceIndex = TRUE;
afae4e7
             }
afae4e7
             break;
afae4e7
@@ -641,8 +658,7 @@ RsDoWordSpaceDescriptor (
afae4e7
             {
afae4e7
                 if (StringLength)
afae4e7
                 {
afae4e7
-                    Descriptor->Address16.ResourceLength = (UINT16)
afae4e7
-                        (Descriptor->Address16.ResourceLength + StringLength);
afae4e7
+                    ResourceLength = (UINT16) (ResourceLength + StringLength);
afae4e7
 
afae4e7
                     strcpy ((char *)
afae4e7
                         &OptionalFields[OptionIndex],
afae4e7
@@ -688,13 +704,20 @@ RsDoWordSpaceDescriptor (
afae4e7
     /* Validate the Min/Max/Len/Gran values */
afae4e7
 
afae4e7
     RsLargeAddressCheck (
afae4e7
-        (UINT64) Descriptor->Address16.Minimum,
afae4e7
-        (UINT64) Descriptor->Address16.Maximum,
afae4e7
-        (UINT64) Descriptor->Address16.AddressLength,
afae4e7
-        (UINT64) Descriptor->Address16.Granularity,
afae4e7
+        Minimum,
afae4e7
+        Maximum,
afae4e7
+        AddressLength,
afae4e7
+        Granularity,
afae4e7
         Descriptor->Address16.Flags,
afae4e7
         MinOp, MaxOp, LengthOp, GranOp, Op);
afae4e7
 
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.ResourceLength, &ResourceLength);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Minimum, &Minimum);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Maximum, &Maximum);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.AddressLength, &AddressLength);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.Granularity, &Granularity);
afae4e7
+    ACPI_MOVE_16_TO_16(&Descriptor->Address16.TranslationOffset, &TranslationOffset);
afae4e7
+
afae4e7
     Rnode->BufferLength = sizeof (AML_RESOURCE_ADDRESS16) +
afae4e7
                             OptionIndex + StringLength;
afae4e7
     return (Rnode);
afae4e7
diff --git a/source/include/acmacros.h b/source/include/acmacros.h
afae4e7
index ee9e745..67fb983 100644
afae4e7
--- a/source/include/acmacros.h
afae4e7
+++ b/source/include/acmacros.h
afae4e7
@@ -107,7 +107,8 @@
afae4e7
 
afae4e7
 /* 32-bit source, 16/32/64 destination */
afae4e7
 
afae4e7
-#define ACPI_MOVE_32_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)    /* Truncate to 16 */
afae4e7
+#define ACPI_MOVE_32_TO_16(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];\
afae4e7
+                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[2];}
afae4e7
 
afae4e7
 #define ACPI_MOVE_32_TO_32(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[3];\
afae4e7
                                          ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[2];\
afae4e7
@@ -122,9 +123,13 @@
afae4e7
 
afae4e7
 /* 64-bit source, 16/32/64 destination */
afae4e7
 
afae4e7
-#define ACPI_MOVE_64_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)    /* Truncate to 16 */
afae4e7
+#define ACPI_MOVE_64_TO_16(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\
afae4e7
+                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];}
afae4e7
 
afae4e7
-#define ACPI_MOVE_64_TO_32(d, s)        ACPI_MOVE_32_TO_32(d, s)    /* Truncate to 32 */
afae4e7
+#define ACPI_MOVE_64_TO_32(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\
afae4e7
+                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];\
afae4e7
+                                         ((  UINT8 *)(void *)(d))[2] = ((UINT8 *)(void *)(s))[5];\
afae4e7
+                                         ((  UINT8 *)(void *)(d))[3] = ((UINT8 *)(void *)(s))[4];}
afae4e7
 
afae4e7
 #define ACPI_MOVE_64_TO_64(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[7];\
afae4e7
                                          ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[6];\
afae4e7
@@ -151,7 +156,9 @@
afae4e7
 
afae4e7
 /* 32-bit source, 16/32/64 destination */
afae4e7
 
afae4e7
-#define ACPI_MOVE_32_TO_16(d, s)        ACPI_MOVE_16_TO_16(d, s)    /* Truncate to 16 */
afae4e7
+#define ACPI_MOVE_32_TO_16(d, s)        {((  UINT8 *)(void *)(d))[0] = ((UINT8 *)(void *)(s))[0];\
afae4e7
+                                         ((  UINT8 *)(void *)(d))[1] = ((UINT8 *)(void *)(s))[1];}
afae4e7
+
afae4e7
 #define ACPI_MOVE_32_TO_32(d, s)        *(UINT32 *)(void *)(d) = *(UINT32 *)(void *)(s)
afae4e7
 #define ACPI_MOVE_32_TO_64(d, s)        *(UINT64 *)(void *)(d) = *(UINT32 *)(void *)(s)
afae4e7
 
afae4e7
diff --git a/source/include/platform/aclinux.h b/source/include/platform/aclinux.h
afae4e7
index 3bc85bc..1bace7f 100644
afae4e7
--- a/source/include/platform/aclinux.h
afae4e7
+++ b/source/include/platform/aclinux.h
a03e600
@@ -83,13 +83,14 @@
afae4e7
 #include <stdlib.h>
afae4e7
 #include <ctype.h>
afae4e7
 #include <unistd.h>
afae4e7
+#include <endian.h>
afae4e7
 
afae4e7
 /* Host-dependent types and defines for user-space ACPICA */
afae4e7
 
afae4e7
 #define ACPI_FLUSH_CPU_CACHE()
a03e600
 #define ACPI_CAST_PTHREAD_T(Pthread) ((ACPI_THREAD_ID) (Pthread))
afae4e7
 
afae4e7
-#if defined(__ia64__) || defined(__x86_64__) || defined(__aarch64__)
afae4e7
+#if __SIZEOF_LONG__ == 8
afae4e7
 #define ACPI_MACHINE_WIDTH          64
afae4e7
 #define COMPILER_DEPENDENT_INT64    long
afae4e7
 #define COMPILER_DEPENDENT_UINT64   unsigned long
a03e600
@@ -100,6 +99,10 @@
afae4e7
 #define ACPI_USE_NATIVE_DIVIDE
afae4e7
 #endif
afae4e7
 
afae4e7
+#if __BYTE_ORDER == __BIG_ENDIAN
afae4e7
+#define ACPI_BIG_ENDIAN
afae4e7
+#endif
afae4e7
+
afae4e7
 #ifndef __cdecl
afae4e7
 #define __cdecl
afae4e7
 #endif
afae4e7
-- 
afae4e7
1.7.12.1
afae4e7