# Taken from http://people.freebsd.org/~peter/ezm3-amd64/ezm3-port.diff.gz
#
# This patch connects the FBSD_AMD64 platform to shared files and adds some
# of the target config settings.
#
Index: language/modula3/m3compiler/m3middle/src/Target.m3
--- language/modula3/m3compiler/m3middle/src/Target.m3	Sun Mar  2 12:39:31 2003
+++ language/modula3/m3compiler/m3middle/src/Target.m3	Mon Feb 16 21:18:51 2004
@@ -16,5 +16,5 @@
   Systems = {
     AIX386, ALPHA_OSF, AP3000, ARM, BSDI4, DS3100,
-    FBSD_ALPHA, FBSD_SPARC64, FreeBSD, FreeBSD2, FreeBSD3,
+    FBSD_ALPHA, FBSD_AMD64, FBSD_SPARC64, FreeBSD, FreeBSD2, FreeBSD3,
     FreeBSD4, HP300, HPPA, IBMR2,
     IBMRT, IRIX5, LINUX, LINUXELF, LINUXLIBC6,
@@ -28,5 +28,5 @@
   SystemNames = ARRAY Systems OF TEXT {
     "AIX386", "ALPHA_OSF", "AP3000", "ARM", "BSDI4", "DS3100",
-    "FBSD_ALPHA", "FBSD_SPARC64", "FreeBSD", "FreeBSD2", "FreeBSD3",
+    "FBSD_ALPHA", "FBSD_AMD64", "FBSD_SPARC64", "FreeBSD", "FreeBSD2", "FreeBSD3",
     "FreeBSD4", "HP300", "HPPA", "IBMR2",
     "IBMRT", "IRIX5", "LINUX", "LINUXELF", "LINUXLIBC6",
@@ -303,4 +303,43 @@
                  Fixed_frame_size          := 4 * Address.size;
                  Guard_page_size           := 8192 * Char.size;
+                 All_floats_legal          := TRUE;
+                 Has_stack_walker          := FALSE;
+                 Setjmp                    := "_setjmp";
+                 Checks_integer_ops        := FALSE;
+                 Global_handler_stack      := TRUE;
+                 Aligned_procedures        := FALSE;
+                 EOL                       := "\n";
+
+    | Systems.FBSD_AMD64 =>
+                 Int_C.cg_type    := CGType.Int_C;
+                 Word_C.cg_type   := CGType.Word_C;
+                 Word_C.max.x[1]  := FF;
+
+                 Int_D.cg_type    := CGType.Int_D;
+                 Int_D.size       := 64;
+                 Int_D.align      := 64;
+                 Int_D.min.x      := IChunks { 00, 00, 00, 16_8000 };
+                 Int_D.max.x      := IChunks { FF, FF, FF, 16_7fff };
+
+                 Word_D.cg_type   := CGType.Word_D;
+                 Word_D.size      := 64;
+                 Word_D.align     := 64;
+                 Word_D.min.x     := IChunks { 00, 00, 00, 00 };
+                 Word_D.max.x     := IChunks { FF, FF, FF, FF };
+
+                 Integer          := Int_D;
+                 Address          := Word_D;
+                 Address.cg_type  := CGType.Addr;
+
+                 max_align                 := 64;
+                 Little_endian             := TRUE;
+                 PCC_bitfield_type_matters := TRUE;
+                 Structure_size_boundary   := 8;
+                 Bitfield_can_overlap      := FALSE;
+                 First_readable_addr       := 4096 * Char.size;
+                 Jumpbuf_size              := 74 * Address.size;
+                 Jumpbuf_align             := Address.align;
+                 Fixed_frame_size          := 4 * Address.size;
+                 Guard_page_size           := 4096 * Char.size;
                  All_floats_legal          := TRUE;
                  Has_stack_walker          := FALSE;
Index: libs/libm3/src/random/m3makefile
--- libs/libm3/src/random/m3makefile	Fri Mar 22 18:28:42 2002
+++ libs/libm3/src/random/m3makefile	Mon Feb 16 21:19:11 2004
@@ -20,4 +20,5 @@
   "DS3100_OSF" : [ _LittleEndian ],
   "FBSD_ALPHA" : [ _LittleEndian ],
+  "FBSD_AMD64" : [ _LittleEndian ],
   "FBSD_SPARC64" : [ _BigEndian ],
   "FreeBSD"    : [ _LittleEndian ],
Index: libs/m3core/src/float/m3makefile
--- libs/m3core/src/float/m3makefile	Fri Mar 22 18:28:42 2002
+++ libs/m3core/src/float/m3makefile	Mon Feb 16 21:20:20 2004
@@ -20,4 +20,5 @@
   "DS3100_OSF" : [ "IEEE", "IEEE-le", "DS3100" ],
   "FBSD_ALPHA" : _float_le,
+  "FBSD_AMD64" : _float_le,
   "FBSD_SPARC64" : _float_be,
   "FreeBSD"    : _float_le,
Index: libs/m3core/src/runtime/m3makefile
--- libs/m3core/src/runtime/m3makefile	Sun Mar  2 12:39:58 2003
+++ libs/m3core/src/runtime/m3makefile	Mon Feb 16 21:20:52 2004
@@ -14,4 +14,5 @@
   "DS3100"     : "ex_frame",  % working stack walker disabled: gcc-3.2.1 issues
   "FBSD_ALPHA" : "ex_frame",
+  "FBSD_AMD64" : "ex_frame",
   "FBSD_SPARC64" : "ex_frame",
   "FreeBSD"    : "ex_frame",
Index: libs/m3core/src/time/POSIX/m3makefile
--- libs/m3core/src/time/POSIX/m3makefile	Fri Mar 22 18:28:42 2002
+++ libs/m3core/src/time/POSIX/m3makefile	Mon Feb 16 21:20:55 2004
@@ -17,4 +17,5 @@
   "DS3100_OSF" : "DateBsd",
   "FBSD_ALPHA" : "DateBsd",
+  "FBSD_AMD64" : "DateBsd",
   "FBSD_SPARC64" : "DateBsd",
   "FreeBSD"    : "DateBsd",
Index: libs/m3core/src/unix/m3makefile
--- libs/m3core/src/unix/m3makefile	Fri Mar 22 18:28:42 2002
+++ libs/m3core/src/unix/m3makefile	Mon Feb 16 21:21:44 2004
@@ -21,4 +21,5 @@
   "DS3100_OSF" : [ "osf-1.generic", "osf-1.DS3100" ],
   "FBSD_ALPHA" : [ "freebsd-4.generic", "freebsd-4.alpha" ],
+  "FBSD_AMD64" : [ "freebsd-4.generic", "freebsd-4.amd64" ],
   "FBSD_SPARC64" : [ "freebsd-4.generic", "freebsd-4.sparc64" ],
   "FreeBSD"    : [ "freebsd-1" ],
Index: m3config/src/COMMON
--- m3config/src/COMMON	Thu Apr 10 11:26:05 2003
+++ m3config/src/COMMON	Mon Feb 16 21:22:25 2004
@@ -588,4 +588,5 @@
   "DS3100"    : [ "POSIX", "32BITS", "decstation", "T"        ],
   "FBSD_ALPHA": [ "POSIX", "64BITS", "alpha-unknown-freebsd4", "T" ],
+  "FBSD_AMD64": [ "POSIX", "64BITS", "x86_64-unknown-freebsd5", "T" ],
   "FBSD_SPARC64": [ "POSIX", "64BITS", "sparc64-unknown-freebsd4", "T" ],
   "FreeBSD"   : [ "POSIX", "32BITS", "i486-unknown-bsd", ""   ],
@@ -677,4 +678,4 @@
 
 % Redefined in released versions
-M3_VERSION="ezm3-1.1"
+M3_VERSION="ezm3-1.1b"
 M3_VERSION_DATE="Thu Apr 10 18:25:22 UTC 2003"
