summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2014-01-05 12:40:04 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2014-01-05 12:40:04 +0000
commitfdb38bf7d602b47650e7ef845f0e5da50671dd06 (patch)
tree10aa2506ea9867ffb8493dc6279af844b3f6f433
parent710dbb67c521e96f1ee32c6ba1981150b886a677 (diff)
parent0d8b7d2a79f02911a8b2408369afe5636c4d6862 (diff)
downloadtoolchains-fdb38bf7d602b47650e7ef845f0e5da50671dd06.tar.gz
toolchains-fdb38bf7d602b47650e7ef845f0e5da50671dd06.tar.bz2
Merge branch 'chris/os4-spidermonkey'
Patches for Spidermonkey 1.7 on ppc-amigaos
-rw-r--r--sdk/Makefile5
-rw-r--r--sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/Makefile.ref.p436
-rw-r--r--sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/js.c.p14
-rw-r--r--sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jsautocfg.h.p56
-rw-r--r--sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jsautokw.h.p405
-rw-r--r--sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jscpucfg.c.p21
-rw-r--r--sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jslibmath.h.p16
-rw-r--r--sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jsnum.c.p12
-rw-r--r--sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jsosdep.h.p14
-rw-r--r--sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jstypes.h.p39
-rw-r--r--sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/prmjtime.c.p54
11 files changed, 1070 insertions, 2 deletions
diff --git a/sdk/Makefile b/sdk/Makefile
index a13eb65..c2ae79e 100644
--- a/sdk/Makefile
+++ b/sdk/Makefile
@@ -91,6 +91,7 @@ ifeq ($(TARGET),arm-unknown-riscos)
EXTRAARGS_SPIDERMONKEY := BUILD_OPT=1 OS_ARCH=RISCOS OS_CPUARCH=arm OS_CONFIG=RISCOS
else
EXTRAARGS_SPIDERMONKEY := --disable-tracejit --disable-thumb2 --without-thumb --enable-static --disable-shared --disable-shared-js --with-cpu-arch=armv3 --disable-tests --disable-methodjit
+ SDK_ITEMS += $(addprefix $(BUILDSTEPS)/, nspr.d)
endif
endif
@@ -111,7 +112,7 @@ ifeq ($(TARGET),m5475-atari-mint)
endif
ifeq ($(TARGET),ppc-amigaos)
- SDK_ITEMS := $(addprefix $(BUILDSTEPS)/, libiconv.d libtre.d libpbl.d $(COMMON_SDK_ITEMS))
+ SDK_ITEMS := $(addprefix $(BUILDSTEPS)/, libiconv.d libtre.d libpbl.d spidermonkey.d $(COMMON_SDK_ITEMS))
EXTRAARGS_LIBCARES := --disable-shared
EXTRAARGS_LIBCURL := --disable-ntlm-wb --without-random
VERSION_SPIDERMONKEY := 1.7.0
@@ -496,7 +497,7 @@ $(SOURCEDIR)/nspr-$(VERSION_NSPR).tar.gz:
# spidermonkey (libmozjs)
-$(BUILDSTEPS)/spidermonkey.d: $(BUILDSTEPS)/builddir.d $(BUILDSTEPS)/nspr.d $(BUILDSTEPS)/spidermonkey-src.d
+$(BUILDSTEPS)/spidermonkey.d: $(BUILDSTEPS)/builddir.d $(BUILDSTEPS)/spidermonkey-src.d
ifeq ($(VERSION_SPIDERMONKEY),1.7.0)
$(env) make -C $(BUILDDIR)/spidermonkey/js-$(VERSION_SPIDERMONKEY)/js/src -f Makefile.ref JS_DIST=$(GCCSDK_INSTALL_ENV) $(EXTRAARGS_SPIDERMONKEY)
$(env) make -C $(BUILDDIR)/spidermonkey/js-$(VERSION_SPIDERMONKEY)/js/src -f Makefile.ref JS_DIST=$(GCCSDK_INSTALL_ENV) $(EXTRAARGS_SPIDERMONKEY) export
diff --git a/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/Makefile.ref.p b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/Makefile.ref.p
new file mode 100644
index 0000000..9de3033
--- /dev/null
+++ b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/Makefile.ref.p
@@ -0,0 +1,436 @@
+--- js/src/Makefile.ref 2006-07-26 19:16:47
++++ js-amiga/src/makefile.ref 2012-09-04 23:15:44
+@@ -1,375 +1,57 @@
+-# -*- Mode: makefile -*-
+-# vim: ft=make
+-#
+-# ***** BEGIN LICENSE BLOCK *****
+-# Version: MPL 1.1/GPL 2.0/LGPL 2.1
+-#
+-# The contents of this file are subject to the Mozilla Public License Version
+-# 1.1 (the "License"); you may not use this file except in compliance with
+-# the License. You may obtain a copy of the License at
+-# http://www.mozilla.org/MPL/
+-#
+-# Software distributed under the License is distributed on an "AS IS" basis,
+-# WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
+-# for the specific language governing rights and limitations under the
+-# License.
+-#
+-# The Original Code is Mozilla Communicator client code, released
+-# March 31, 1998.
+-#
+-# The Initial Developer of the Original Code is
+-# Netscape Communications Corporation.
+-# Portions created by the Initial Developer are Copyright (C) 1998
+-# the Initial Developer. All Rights Reserved.
+-#
+-# Contributor(s):
+-# Michael Ang <mang@subcarrier.org>
+-# Kevin Buhr <buhr@stat.wisc.edu>
+-#
+-# Alternatively, the contents of this file may be used under the terms of
+-# either of the GNU General Public License Version 2 or later (the "GPL"),
+-# or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
+-# in which case the provisions of the GPL or the LGPL are applicable instead
+-# of those above. If you wish to allow use of your version of this file only
+-# under the terms of either the GPL or the LGPL, and not to allow others to
+-# use your version of this file under the terms of the MPL, indicate your
+-# decision by deleting the provisions above and replace them with the notice
+-# and other provisions required by the GPL or the LGPL. If you do not delete
+-# the provisions above, a recipient may use your version of this file under
+-# the terms of any one of the MPL, the GPL or the LGPL.
+-#
+-# ***** END LICENSE BLOCK *****
+-
+-#
+-# JSRef GNUmake makefile.
+-#
+-# Note: dependency rules are missing for some files (some
+-# .h, all .msg, etc.) Re-make clean if in doubt.
+-#
+-
+-
+-DEPTH = .
+-
+-include config.mk
+-
+-#NS_USE_NATIVE = 1
+-
+-ifdef NARCISSUS
+-DEFINES += -DNARCISSUS
+-endif
+-
+-# Look in OBJDIR to find jsautocfg.h and jsautokw.h
+-INCLUDES += -I$(OBJDIR)
+-
+-ifdef JS_THREADSAFE
+-DEFINES += -DJS_THREADSAFE
+-INCLUDES += -I$(DIST)/include/nspr
+-ifdef USE_MSVC
+-OTHER_LIBS += $(DIST)/lib/libnspr$(NSPR_LIBSUFFIX).lib
+-else
+-OTHER_LIBS += -L$(DIST)/lib -lnspr$(NSPR_LIBSUFFIX)
+-endif
+-endif
+-
+-ifdef JS_NO_THIN_LOCKS
+-DEFINES += -DJS_USE_ONLY_NSPR_LOCKS
+-endif
+-
+-ifdef JS_HAS_FILE_OBJECT
+-DEFINES += -DJS_HAS_FILE_OBJECT
+-endif
+-
+-#
+-# XCFLAGS may be set in the environment or on the gmake command line
+-#
+-CFLAGS += $(OPTIMIZER) $(OS_CFLAGS) $(DEFINES) $(INCLUDES) $(XCFLAGS)
+-
+-LDFLAGS = $(XLDFLAGS)
+-
+-ifndef NO_LIBM
+-LDFLAGS += -lm
+-endif
+-
+-# Prevent floating point errors caused by VC++ optimizations
+-ifeq ($(OS_ARCH),WINNT)
+-_MSC_VER = $(shell $(CC) 2>&1 | sed -n 's/.*Compiler Version \([0-9]*\)\.\([0-9]*\).*/\1\2/p')
+-ifeq (,$(filter-out 1200 1300 1310,$(_MSC_VER)))
+-CFLAGS += -Op
+-else
+-CFLAGS += -fp:precise
+-endif
+-endif # WINNT
+-
+-#
+-# Ask perl what flags it was built with, so we can build js with similar flags
+-# and link properly. Viva gmake.
+-#
+-ifdef JS_PERLCONNECT
+-DEFINES += -DPERLCONNECT -D_GNU_SOURCE
+-
+-PERLCFLAGS := $(shell perl -MExtUtils::Embed -e ccopts)
+-PERLLDFLAGS := $(shell perl -MExtUtils::Embed -e ldopts)
+-
+-# perl erroneously reports compiler flag -rdynamic (interpreted by ld
+-# as -r) when it really meant -export-dynamic.
+-PERLLDFLAGS := $(subst -rdynamic,-export-dynamic,$(PERLLDFLAGS))
+-
+-CFLAGS += $(PERLCFLAGS)
+-#LDFLAGS += $(PERLLDFLAGS) #PH removed this assgnment
+-INCLUDES += -I. #needed for perlconnect/jsperl.c
+-endif
+-
+-#
+-# Server-related changes :
+-#
+-ifdef NES40
+-DEFINES += -DNES40
+-endif
+-
+-#
+-# Line editing support.
+-# Define JS_READLINE or JS_EDITLINE to enable line editing in the
+-# js command-line interpreter.
+-#
+-ifdef JS_READLINE
+-# For those platforms with the readline library installed.
+-DEFINES += -DEDITLINE
+-PROG_LIBS += -lreadline -ltermcap
+-else
+-ifdef JS_EDITLINE
+-# Use the editline library, built locally.
+-PREDIRS += editline
+-DEFINES += -DEDITLINE
+-PROG_LIBS += editline/$(OBJDIR)/libedit.a
+-endif
+-endif
+-
+-# For purify
+-PURE_CFLAGS = -DXP_UNIX $(OPTIMIZER) $(PURE_OS_CFLAGS) $(DEFINES) \
+- $(INCLUDES) $(XCFLAGS)
+-
+-#
+-# JS file lists
+-#
+-JS_HFILES = \
+- jsarray.h \
+- jsatom.h \
+- jsbool.h \
+- jsconfig.h \
+- jscntxt.h \
+- jsdate.h \
+- jsemit.h \
+- jsexn.h \
+- jsfun.h \
+- jsgc.h \
+- jsinterp.h \
+- jsiter.h \
+- jslibmath.h \
+- jslock.h \
+- jsmath.h \
+- jsnum.h \
+- jsobj.h \
+- jsopcode.h \
+- jsparse.h \
+- jsarena.h \
+- jsclist.h \
+- jsdhash.h \
+- jsdtoa.h \
+- jshash.h \
+- jslong.h \
+- jsosdep.h \
+- jstypes.h \
+- jsprvtd.h \
+- jspubtd.h \
+- jsregexp.h \
+- jsscan.h \
+- jsscope.h \
+- jsscript.h \
+- jsstr.h \
+- jsxdrapi.h \
+- jsxml.h \
+- $(NULL)
+-
+-API_HFILES = \
+- jsapi.h \
+- jsdbgapi.h \
+- $(NULL)
+-
+-OTHER_HFILES = \
+- jsbit.h \
+- jscompat.h \
+- jscpucfg.h \
+- jsotypes.h \
+- jsstddef.h \
+- prmjtime.h \
+- resource.h \
+- jsopcode.tbl \
+- jsproto.tbl \
+- js.msg \
+- jsshell.msg \
+- jskeyword.tbl \
+- $(NULL)
+-
+-ifndef PREBUILT_CPUCFG
+-OTHER_HFILES += $(OBJDIR)/jsautocfg.h
+-endif
+-OTHER_HFILES += $(OBJDIR)/jsautokw.h
+-
+-HFILES = $(JS_HFILES) $(API_HFILES) $(OTHER_HFILES)
+-
+-JS_CFILES = \
+- jsapi.c \
+- jsarena.c \
+- jsarray.c \
+- jsatom.c \
+- jsbool.c \
+- jscntxt.c \
+- jsdate.c \
+- jsdbgapi.c \
+- jsdhash.c \
+- jsdtoa.c \
+- jsemit.c \
+- jsexn.c \
+- jsfun.c \
+- jsgc.c \
+- jshash.c \
+- jsinterp.c \
+- jsiter.c \
+- jslock.c \
+- jslog2.c \
+- jslong.c \
+- jsmath.c \
+- jsnum.c \
+- jsobj.c \
+- jsopcode.c \
+- jsparse.c \
+- jsprf.c \
+- jsregexp.c \
+- jsscan.c \
+- jsscope.c \
+- jsscript.c \
+- jsstr.c \
+- jsutil.c \
+- jsxdrapi.c \
+- jsxml.c \
+- prmjtime.c \
+- $(NULL)
+-
+-ifdef JS_LIVECONNECT
+-DIRS += liveconnect
+-endif
+-
+-ifdef JS_PERLCONNECT
+-JS_CFILES += perlconnect/jsperl.c
+-endif
+-
+-ifdef JS_HAS_FILE_OBJECT
+-JS_CFILES += jsfile.c
+-JS_HFILES += jsfile.h
+-endif
+-
+-LIB_CFILES = $(JS_CFILES)
+-LIB_ASFILES := $(wildcard *_$(OS_ARCH).s)
+-PROG_CFILES = js.c
+-
+-ifdef USE_MSVC
+-LIBRARY = $(OBJDIR)/js32.lib
+-SHARED_LIBRARY = $(OBJDIR)/js32.dll
+-PROGRAM = $(OBJDIR)/js.exe
+-else
+-LIBRARY = $(OBJDIR)/libjs.a
+-SHARED_LIBRARY = $(OBJDIR)/libjs.$(SO_SUFFIX)
+-PROGRAM = $(OBJDIR)/js
+-ifdef JS_PERLCONNECT
+-PROG_LIBS += $(PERLLDFLAGS)
+-endif
+-endif
+-
+-include rules.mk
+-
+-MOZ_DEPTH = ../..
+-include jsconfig.mk
+-
+-nsinstall-target:
+- cd ../../config; $(MAKE) OBJDIR=$(OBJDIR) OBJDIR_NAME=$(OBJDIR)
+-
+-#
+-# Rules for keyword switch generation
+-#
+-
+-GARBAGE += $(OBJDIR)/jsautokw.h $(OBJDIR)/jskwgen$(HOST_BIN_SUFFIX)
+-GARBAGE += $(OBJDIR)/jskwgen.$(OBJ_SUFFIX)
+-
+-$(OBJDIR)/jsscan.$(OBJ_SUFFIX): $(OBJDIR)/jsautokw.h jskeyword.tbl
+-
+-$(OBJDIR)/jskwgen.$(OBJ_SUFFIX): jskwgen.c jskeyword.tbl
+-
+-$(OBJDIR)/jsautokw.h: $(OBJDIR)/jskwgen$(HOST_BIN_SUFFIX) jskeyword.tbl
+- $(OBJDIR)/jskwgen$(HOST_BIN_SUFFIX) $@
+-
+-ifdef USE_MSVC
+-
+-$(OBJDIR)/jskwgen.obj: jskwgen.c jskeyword.tbl
+- @$(MAKE_OBJDIR)
+- $(CC) -Fo$(OBJDIR)/ -c $(CFLAGS) $<
+-
+-$(OBJDIR)/jskwgen$(HOST_BIN_SUFFIX): $(OBJDIR)/jskwgen.$(OBJ_SUFFIX)
+- link.exe -out:"$@" $(EXE_LINK_FLAGS) $^
+-
+-else
+-
+-$(OBJDIR)/jskwgen.o: jskwgen.c jskeyword.tbl
+- @$(MAKE_OBJDIR)
+- $(CC) -o $@ -c $(CFLAGS) $<
+-
+-$(OBJDIR)/jskwgen$(HOST_BIN_SUFFIX): $(OBJDIR)/jskwgen.$(OBJ_SUFFIX)
+- $(CC) -o $@ $(CFLAGS) $(LDFLAGS) $^
+-
+-endif
+-
+-#
+-# JS shell executable
+-#
+-
+-ifdef USE_MSVC
+-$(PROGRAM): $(PROG_OBJS) $(LIBRARY)
+- link.exe -out:"$@" $(EXE_LINK_FLAGS) $^
+-else
+-$(PROGRAM): $(PROG_OBJS) $(LIBRARY)
+- $(CC) -o $@ $(CFLAGS) $(PROG_OBJS) $(LIBRARY) $(LDFLAGS) $(OTHER_LIBS) \
+- $(PROG_LIBS)
+-endif
+-
+-$(PROGRAM).pure: $(PROG_OBJS) $(LIBRARY)
+- purify $(PUREFLAGS) \
+- $(CC) -o $@ $(PURE_OS_CFLAGS) $(PROG_OBJS) $(LIBRARY) $(LDFLAGS) \
+- $(OTHER_LIBS) $(PROG_LIBS)
+-
+-ifndef PREBUILT_CPUCFG
+-$(HFILES) $(CFILES): $(OBJDIR)/jsautocfg.h
+-
+-$(OBJDIR)/jsautocfg.h: $(OBJDIR)/jscpucfg
+- rm -f $@
+- $(OBJDIR)/jscpucfg > $@
+-
+-$(OBJDIR)/jscpucfg: $(OBJDIR)/jscpucfg.o
+- $(CC) -o $@ $(OBJDIR)/jscpucfg.o
+-
+-# Add to TARGETS for clobber rule
+-TARGETS += $(OBJDIR)/jsautocfg.h $(OBJDIR)/jscpucfg \
+- $(OBJDIR)/jscpucfg.o
+-endif
+-
+-#
+-# Hardwire dependencies on jsopcode.tbl
+-#
+-jsopcode.h jsopcode.c: jsopcode.tbl
+-
+--include $(DEPENDENCIES)
+-
+-TARNAME = jsref.tar
+-TARFILES = files `cat files`
+-
+-SUFFIXES: .i
+-%.i: %.c
+- $(CC) -C -E $(CFLAGS) $< > $*.i
++CFLAGS= -O2 -DXP_AMIGA -DHAVE_VA_COPY -DVA_COPY=va_copy -fvisibility=hidden -DHAVE_VISIBILITY_ATTRIBUTE
++AR = ppc-amigaos-ar
++CC = ppc-amigaos-gcc
++STRIP = ppc-amigaos-strip
++LIBS =-Lfdlibm -lfdlibm -lm
++RM = rm
++MKDIR = mkdir
++OBJDIR = objAOS4
++BINDIR = binAOS4
++CP = cp
++
++#OBJS = js.o jsapi.o jsarena.o jsarray.o jsatom.o jsbool.o \
++# jscntxt.o jsdate.o jsdbgapi.o jsdhash.o jsdtoa.o \
++# jsemit.o jsexn.o jsfile.o jsfun.o jsgc.o jshash.o \
++# jsinterp.o jslock.o jslong.o jsmath.o jsnum.o \
++# jsobj.o jsopcode.o jsparse.o jsprf.o jsregexp.o \
++# jsscan.o jsscope.o jsscript.o jsstr.o jsutil.o \
++# jsxdrapi.o prmjtime.o jslog2.o
++
++OBJS = prmjtime.o jsapi.o jsarena.o jsarray.o jsatom.o \
++ jsbool.o jscntxt.o jsdate.o jsdbgapi.o jsdhash.o \
++ jsdtoa.o jsemit.o jsexn.o jsfile.o jsfun.o jsgc.o \
++ jshash.o jsinterp.o jslock.o jslong.o jsmath.o \
++ jsnum.o jsobj.o jsopcode.o jsparse.o jsprf.o \
++ jsregexp.o jsscan.o jsscope.o jsscript.o jsstr.o \
++ jsutil.o jsxdrapi.o jslog2.o jsxml.o jsiter.o
++
++all : $(OBJDIR) $(BINDIR) libjs.a
++
++$(OBJDIR):
++ -$(MKDIR) $(OBJDIR)
++
++$(BINDIR):
++ -$(MKDIR) $(BINDIR)
++
++libjs.a: $(addprefix $(OBJDIR)/,$(OBJS))
++ $(AR) cru $@ $^
++# $(STRIP) -o $@ $@.db
++
++$(OBJDIR)/jsdate.o: jsdate.c prmjtime.c
++ $(CC) $(CFLAGS) -c $< -o $@
++
++clean:
++ $(RM) $(addprefix $(OBJDIR)/,$(OBJS))
++
++#jsdtoa.o: jsdtoa.c
++# $(CC) -D__STDC__ $(CFLAGS) -c $< -o $@
++
++$(OBJDIR)/%.o : %.c
++ $(CC) $(CFLAGS) -c $< -o $@
++
++export:
++ $(MKDIR) $(JS_DIST)/include/js
++ $(CP) libjs.a $(JS_DIST)/lib
++ $(CP) *.h $(JS_DIST)/include/js
++ $(CP) *.tbl $(JS_DIST)/include/js
++
+
diff --git a/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/js.c.p b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/js.c.p
new file mode 100644
index 0000000..0009e4a
--- /dev/null
+++ b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/js.c.p
@@ -0,0 +1,14 @@
+--- js/src/js.c 2007-04-20 18:45:18
++++ js-amiga/src/js.c 2012-07-06 21:15:11
+@@ -88,6 +88,10 @@
+ #include <sys/wait.h>
+ #endif
+
++#ifdef XP_AMIGA
++#include <fcntl.h>
++#endif
++
+ #if defined(XP_WIN) || defined(XP_OS2)
+ #include <io.h> /* for isatty() */
+ #endif
+
diff --git a/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jsautocfg.h.p b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jsautocfg.h.p
new file mode 100644
index 0000000..2b763b2
--- /dev/null
+++ b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jsautocfg.h.p
@@ -0,0 +1,56 @@
+--- js/src/jsautocfg.h 1978-01-01 00:00:00
++++ js-amiga/src/jsautocfg.h 2012-07-06 23:28:26
+@@ -0,0 +1,52 @@
++#ifndef js_cpucfg___
++#define js_cpucfg___
++
++/* AUTOMATICALLY GENERATED - DO NOT EDIT */
++
++#undef IS_LITTLE_ENDIAN
++#define IS_BIG_ENDIAN 1
++
++#define JS_BYTES_PER_BYTE 1L
++#define JS_BYTES_PER_SHORT 2L
++#define JS_BYTES_PER_INT 4L
++#define JS_BYTES_PER_INT64 8L
++#define JS_BYTES_PER_LONG 4L
++#define JS_BYTES_PER_FLOAT 4L
++#define JS_BYTES_PER_DOUBLE 8L
++#define JS_BYTES_PER_WORD 4L
++#define JS_BYTES_PER_DWORD 8L
++
++#define JS_BITS_PER_BYTE 8L
++#define JS_BITS_PER_SHORT 16L
++#define JS_BITS_PER_INT 32L
++#define JS_BITS_PER_INT64 64L
++#define JS_BITS_PER_LONG 32L
++#define JS_BITS_PER_FLOAT 32L
++#define JS_BITS_PER_DOUBLE 64L
++#define JS_BITS_PER_WORD 32L
++
++#define JS_BITS_PER_BYTE_LOG2 3L
++#define JS_BITS_PER_SHORT_LOG2 4L
++#define JS_BITS_PER_INT_LOG2 5L
++#define JS_BITS_PER_INT64_LOG2 6L
++#define JS_BITS_PER_LONG_LOG2 5L
++#define JS_BITS_PER_FLOAT_LOG2 5L
++#define JS_BITS_PER_DOUBLE_LOG2 6L
++#define JS_BITS_PER_WORD_LOG2 5L
++
++#define JS_ALIGN_OF_SHORT 2L
++#define JS_ALIGN_OF_INT 4L
++#define JS_ALIGN_OF_LONG 4L
++#define JS_ALIGN_OF_INT64 8L
++#define JS_ALIGN_OF_FLOAT 4L
++#define JS_ALIGN_OF_DOUBLE 8L
++#define JS_ALIGN_OF_POINTER 4L
++#define JS_ALIGN_OF_WORD 4L
++
++#define JS_BYTES_PER_WORD_LOG2 2L
++#define JS_BYTES_PER_DWORD_LOG2 3L
++#define JS_WORDS_PER_DWORD_LOG2 1L
++
++#define JS_STACK_GROWTH_DIRECTION (-1)
++
++#endif /* js_cpucfg___ */
+
diff --git a/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jsautokw.h.p b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jsautokw.h.p
new file mode 100644
index 0000000..926516b
--- /dev/null
+++ b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jsautokw.h.p
@@ -0,0 +1,405 @@
+--- js/src/jsautokw.h 1978-01-01 00:00:00
++++ js-amiga/src/jsautokw.h 2012-07-06 23:13:05
+@@ -0,0 +1,401 @@
++ /*
++ * Generating switch for the list of 61 entries:
++ * break
++ * case
++ * continue
++ * default
++ * delete
++ * do
++ * else
++ * export
++ * false
++ * for
++ * function
++ * if
++ * in
++ * new
++ * null
++ * return
++ * switch
++ * this
++ * true
++ * typeof
++ * var
++ * void
++ * while
++ * with
++ * const
++ * try
++ * catch
++ * finally
++ * throw
++ * instanceof
++ * abstract
++ * boolean
++ * byte
++ * char
++ * class
++ * double
++ * extends
++ * final
++ * float
++ * goto
++ * implements
++ * import
++ * int
++ * interface
++ * long
++ * native
++ * package
++ * private
++ * protected
++ * public
++ * short
++ * static
++ * super
++ * synchronized
++ * throws
++ * transient
++ * volatile
++ * enum
++ * debugger
++ * yield
++ * let
++ */
++ switch (JSKW_LENGTH()) {
++ case 2:
++ if (JSKW_AT(0) == 'd') {
++ if (JSKW_AT(1)=='o') {
++ JSKW_GOT_MATCH(5) /* do */
++ }
++ JSKW_NO_MATCH()
++ }
++ if (JSKW_AT(0) == 'i') {
++ if (JSKW_AT(1) == 'f') {
++ JSKW_GOT_MATCH(11) /* if */
++ }
++ if (JSKW_AT(1) == 'n') {
++ JSKW_GOT_MATCH(12) /* in */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ case 3:
++ switch (JSKW_AT(2)) {
++ case 'r':
++ if (JSKW_AT(0) == 'f') {
++ if (JSKW_AT(1)=='o') {
++ JSKW_GOT_MATCH(9) /* for */
++ }
++ JSKW_NO_MATCH()
++ }
++ if (JSKW_AT(0) == 'v') {
++ if (JSKW_AT(1)=='a') {
++ JSKW_GOT_MATCH(20) /* var */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ case 't':
++ if (JSKW_AT(0) == 'i') {
++ if (JSKW_AT(1)=='n') {
++ JSKW_GOT_MATCH(42) /* int */
++ }
++ JSKW_NO_MATCH()
++ }
++ if (JSKW_AT(0) == 'l') {
++ if (JSKW_AT(1)=='e') {
++ JSKW_GOT_MATCH(60) /* let */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ case 'w':
++ if (JSKW_AT(0)=='n' && JSKW_AT(1)=='e') {
++ JSKW_GOT_MATCH(13) /* new */
++ }
++ JSKW_NO_MATCH()
++ case 'y':
++ if (JSKW_AT(0)=='t' && JSKW_AT(1)=='r') {
++ JSKW_GOT_MATCH(25) /* try */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ case 4:
++ switch (JSKW_AT(3)) {
++ case 'd':
++ if (JSKW_AT(0)=='v' && JSKW_AT(1)=='o' && JSKW_AT(2)=='i') {
++ JSKW_GOT_MATCH(21) /* void */
++ }
++ JSKW_NO_MATCH()
++ case 'e':
++ if (JSKW_AT(2) == 's') {
++ if (JSKW_AT(0) == 'c') {
++ if (JSKW_AT(1)=='a') {
++ JSKW_GOT_MATCH(1) /* case */
++ }
++ JSKW_NO_MATCH()
++ }
++ if (JSKW_AT(0) == 'e') {
++ if (JSKW_AT(1)=='l') {
++ JSKW_GOT_MATCH(6) /* else */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ }
++ if (JSKW_AT(2) == 't') {
++ if (JSKW_AT(0)=='b' && JSKW_AT(1)=='y') {
++ JSKW_GOT_MATCH(32) /* byte */
++ }
++ JSKW_NO_MATCH()
++ }
++ if (JSKW_AT(2) == 'u') {
++ if (JSKW_AT(0)=='t' && JSKW_AT(1)=='r') {
++ JSKW_GOT_MATCH(18) /* true */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ case 'g':
++ if (JSKW_AT(0)=='l' && JSKW_AT(1)=='o' && JSKW_AT(2)=='n') {
++ JSKW_GOT_MATCH(44) /* long */
++ }
++ JSKW_NO_MATCH()
++ case 'h':
++ if (JSKW_AT(0)=='w' && JSKW_AT(1)=='i' && JSKW_AT(2)=='t') {
++ JSKW_GOT_MATCH(23) /* with */
++ }
++ JSKW_NO_MATCH()
++ case 'l':
++ if (JSKW_AT(0)=='n' && JSKW_AT(1)=='u' && JSKW_AT(2)=='l') {
++ JSKW_GOT_MATCH(14) /* null */
++ }
++ JSKW_NO_MATCH()
++ case 'm':
++ if (JSKW_AT(0)=='e' && JSKW_AT(1)=='n' && JSKW_AT(2)=='u') {
++ JSKW_GOT_MATCH(57) /* enum */
++ }
++ JSKW_NO_MATCH()
++ case 'o':
++ if (JSKW_AT(0)=='g' && JSKW_AT(1)=='o' && JSKW_AT(2)=='t') {
++ JSKW_GOT_MATCH(39) /* goto */
++ }
++ JSKW_NO_MATCH()
++ case 'r':
++ if (JSKW_AT(0)=='c' && JSKW_AT(1)=='h' && JSKW_AT(2)=='a') {
++ JSKW_GOT_MATCH(33) /* char */
++ }
++ JSKW_NO_MATCH()
++ case 's':
++ if (JSKW_AT(0)=='t' && JSKW_AT(1)=='h' && JSKW_AT(2)=='i') {
++ JSKW_GOT_MATCH(17) /* this */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ case 5:
++ switch (JSKW_AT(3)) {
++ case 'a':
++ if (JSKW_AT(0) == 'b') {
++ if (JSKW_AT(4)=='k' && JSKW_AT(1)=='r' && JSKW_AT(2)=='e') {
++ JSKW_GOT_MATCH(0) /* break */
++ }
++ JSKW_NO_MATCH()
++ }
++ if (JSKW_AT(0) == 'f') {
++ if (JSKW_AT(4) == 'l') {
++ if (JSKW_AT(2)=='n' && JSKW_AT(1)=='i') {
++ JSKW_GOT_MATCH(37) /* final */
++ }
++ JSKW_NO_MATCH()
++ }
++ if (JSKW_AT(4) == 't') {
++ if (JSKW_AT(2)=='o' && JSKW_AT(1)=='l') {
++ JSKW_GOT_MATCH(38) /* float */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ case 'c':
++ if (JSKW_AT(0)=='c' && JSKW_AT(1)=='a' && JSKW_AT(2)=='t' && JSKW_AT(4)=='h') {
++ JSKW_GOT_MATCH(26) /* catch */
++ }
++ JSKW_NO_MATCH()
++ case 'e':
++ if (JSKW_AT(0)=='s' && JSKW_AT(1)=='u' && JSKW_AT(2)=='p' && JSKW_AT(4)=='r') {
++ JSKW_GOT_MATCH(52) /* super */
++ }
++ JSKW_NO_MATCH()
++ case 'l':
++ if (JSKW_AT(0) == 'w') {
++ if (JSKW_AT(4)=='e' && JSKW_AT(1)=='h' && JSKW_AT(2)=='i') {
++ JSKW_GOT_MATCH(22) /* while */
++ }
++ JSKW_NO_MATCH()
++ }
++ if (JSKW_AT(0) == 'y') {
++ if (JSKW_AT(4)=='d' && JSKW_AT(1)=='i' && JSKW_AT(2)=='e') {
++ JSKW_GOT_MATCH(59) /* yield */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ case 'o':
++ if (JSKW_AT(0)=='t' && JSKW_AT(1)=='h' && JSKW_AT(2)=='r' && JSKW_AT(4)=='w') {
++ JSKW_GOT_MATCH(28) /* throw */
++ }
++ JSKW_NO_MATCH()
++ case 'r':
++ if (JSKW_AT(0)=='s' && JSKW_AT(1)=='h' && JSKW_AT(2)=='o' && JSKW_AT(4)=='t') {
++ JSKW_GOT_MATCH(50) /* short */
++ }
++ JSKW_NO_MATCH()
++ case 's':
++ if (JSKW_AT(0) == 'c') {
++ if (JSKW_AT(4) == 's') {
++ if (JSKW_AT(2)=='a' && JSKW_AT(1)=='l') {
++ JSKW_GOT_MATCH(34) /* class */
++ }
++ JSKW_NO_MATCH()
++ }
++ if (JSKW_AT(4) == 't') {
++ if (JSKW_AT(2)=='n' && JSKW_AT(1)=='o') {
++ JSKW_GOT_MATCH(24) /* const */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ }
++ if (JSKW_AT(0) == 'f') {
++ if (JSKW_AT(4)=='e' && JSKW_AT(1)=='a' && JSKW_AT(2)=='l') {
++ JSKW_GOT_MATCH(8) /* false */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ case 6:
++ switch (JSKW_AT(0)) {
++ case 'd':
++ if (JSKW_AT(1) == 'o') {
++ if (JSKW_AT(5)=='e' && JSKW_AT(4)=='l' && JSKW_AT(2)=='u' && JSKW_AT(3)=='b') {
++ JSKW_GOT_MATCH(35) /* double */
++ }
++ JSKW_NO_MATCH()
++ }
++ if (JSKW_AT(1) == 'e') {
++ if (JSKW_AT(5)=='e' && JSKW_AT(4)=='t' && JSKW_AT(2)=='l' && JSKW_AT(3)=='e') {
++ JSKW_GOT_MATCH(4) /* delete */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ case 'e':
++ JSKW_TEST_GUESS(7) /* export */
++ case 'i':
++ JSKW_TEST_GUESS(41) /* import */
++ case 'n':
++ JSKW_TEST_GUESS(45) /* native */
++ case 'p':
++ JSKW_TEST_GUESS(49) /* public */
++ case 'r':
++ JSKW_TEST_GUESS(15) /* return */
++ case 's':
++ if (JSKW_AT(1) == 't') {
++ if (JSKW_AT(5)=='c' && JSKW_AT(4)=='i' && JSKW_AT(2)=='a' && JSKW_AT(3)=='t') {
++ JSKW_GOT_MATCH(51) /* static */
++ }
++ JSKW_NO_MATCH()
++ }
++ if (JSKW_AT(1) == 'w') {
++ if (JSKW_AT(5)=='h' && JSKW_AT(4)=='c' && JSKW_AT(2)=='i' && JSKW_AT(3)=='t') {
++ JSKW_GOT_MATCH(16) /* switch */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ case 't':
++ if (JSKW_AT(5) == 'f') {
++ if (JSKW_AT(4)=='o' && JSKW_AT(1)=='y' && JSKW_AT(2)=='p' && JSKW_AT(3)=='e') {
++ JSKW_GOT_MATCH(19) /* typeof */
++ }
++ JSKW_NO_MATCH()
++ }
++ if (JSKW_AT(5) == 's') {
++ if (JSKW_AT(4)=='w' && JSKW_AT(1)=='h' && JSKW_AT(2)=='r' && JSKW_AT(3)=='o') {
++ JSKW_GOT_MATCH(54) /* throws */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ case 7:
++ switch (JSKW_AT(0)) {
++ case 'b':
++ JSKW_TEST_GUESS(31) /* boolean */
++ case 'd':
++ JSKW_TEST_GUESS(3) /* default */
++ case 'e':
++ JSKW_TEST_GUESS(36) /* extends */
++ case 'f':
++ JSKW_TEST_GUESS(27) /* finally */
++ case 'p':
++ if (JSKW_AT(1) == 'a') {
++ JSKW_TEST_GUESS(46) /* package */
++ }
++ if (JSKW_AT(1) == 'r') {
++ JSKW_TEST_GUESS(47) /* private */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ case 8:
++ switch (JSKW_AT(4)) {
++ case 'g':
++ JSKW_TEST_GUESS(58) /* debugger */
++ case 'i':
++ JSKW_TEST_GUESS(2) /* continue */
++ case 'r':
++ JSKW_TEST_GUESS(30) /* abstract */
++ case 't':
++ if (JSKW_AT(1) == 'o') {
++ JSKW_TEST_GUESS(56) /* volatile */
++ }
++ if (JSKW_AT(1) == 'u') {
++ JSKW_TEST_GUESS(10) /* function */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ case 9:
++ if (JSKW_AT(1) == 'n') {
++ JSKW_TEST_GUESS(43) /* interface */
++ }
++ if (JSKW_AT(1) == 'r') {
++ if (JSKW_AT(0) == 'p') {
++ JSKW_TEST_GUESS(48) /* protected */
++ }
++ if (JSKW_AT(0) == 't') {
++ JSKW_TEST_GUESS(55) /* transient */
++ }
++ JSKW_NO_MATCH()
++ }
++ JSKW_NO_MATCH()
++ case 10:
++ if (JSKW_AT(1) == 'n') {
++ JSKW_TEST_GUESS(29) /* instanceof */
++ }
++ if (JSKW_AT(1) == 'm') {
++ JSKW_TEST_GUESS(40) /* implements */
++ }
++ JSKW_NO_MATCH()
++ case 12:
++ JSKW_TEST_GUESS(53) /* synchronized */
++ }
++ JSKW_NO_MATCH()
+
diff --git a/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jscpucfg.c.p b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jscpucfg.c.p
new file mode 100644
index 0000000..436e25d
--- /dev/null
+++ b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jscpucfg.c.p
@@ -0,0 +1,21 @@
+--- js/src/jscpucfg.c 2007-06-29 20:30:27
++++ js-amiga/src/jscpucfg.c 2012-07-06 23:27:54
+@@ -53,6 +53,10 @@
+
+ /* Generate cpucfg.h */
+
++#ifdef XP_AMIGA
++#include <exec/types.h>
++#define INT64 ULONG
++#else
+ #if defined(XP_WIN) || defined(XP_OS2)
+ #ifdef WIN32
+ #if defined(__GNUC__)
+@@ -70,6 +74,7 @@
+ #define INT64 long long
+ #endif
+ #endif
++#endif
+
+ #endif /* CROSS_COMPILE */
+
diff --git a/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jslibmath.h.p b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jslibmath.h.p
new file mode 100644
index 0000000..b1256c2
--- /dev/null
+++ b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jslibmath.h.p
@@ -0,0 +1,16 @@
+--- js/src/jslibmath.h 2006-07-13 07:01:04
++++ js-amiga/src/jslibmath.h 2012-07-06 23:06:50
+@@ -58,6 +58,12 @@
+ * - fdlibm broken on OSF1/alpha
+ */
+
++
++#if defined(XP_AMIGA)
++#define JS_USE_FDLIBM_MATH 0
++#endif
++
++
+ #ifndef JS_USE_FDLIBM_MATH
+ #define JS_USE_FDLIBM_MATH 0
+ #endif
+
diff --git a/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jsnum.c.p b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jsnum.c.p
new file mode 100644
index 0000000..5f01c21
--- /dev/null
+++ b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jsnum.c.p
@@ -0,0 +1,12 @@
+--- js/src/jsnum.c 2007-04-06 20:53:22
++++ js-amiga/src/jsnum.c 2012-07-06 21:14:25
+@@ -42,7 +42,7 @@
+ * JS number type and wrapper class.
+ */
+ #include "jsstddef.h"
+-#if defined(XP_WIN) || defined(XP_OS2)
++#if defined(XP_WIN) || defined(XP_OS2) || defined(XP_AMIGA)
+ #include <float.h>
+ #endif
+ #include <locale.h>
+
diff --git a/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jsosdep.h.p b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jsosdep.h.p
new file mode 100644
index 0000000..4ece807
--- /dev/null
+++ b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jsosdep.h.p
@@ -0,0 +1,14 @@
+--- js/src/jsosdep.h 2006-07-07 02:12:02
++++ js-amiga/src/jsosdep.h 2012-07-06 21:18:43
+@@ -56,6 +56,11 @@
+ #define JS_HAVE_LONG_LONG
+ #endif
+
++#ifdef XP_AMIGA
++#undef JS_HAVE_LONG_LONG
++
++#include <stddef.h>
++#endif
+
+ #ifdef XP_UNIX
+
diff --git a/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jstypes.h.p b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jstypes.h.p
new file mode 100644
index 0000000..2c6f79f
--- /dev/null
+++ b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/jstypes.h.p
@@ -0,0 +1,39 @@
+--- js/src/jstypes.h 2006-08-14 20:32:06
++++ js-amiga/src/jstypes.h 2012-07-29 12:14:05
+@@ -117,6 +117,21 @@
+ #define JS_STATIC_DLL_CALLBACK(__x) __x JS_DLL_CALLBACK
+ #endif /* _WINDLL */
+
++#elif defined(XP_AMIGA)
++#ifdef HAVE_VISIBILITY_ATTRIBUTE
++#define JS_EXTERNAL_VIS __attribute__((visibility ("default")))
++#else
++#define JS_EXTERNAL_VIS
++#endif
++
++#define JS_EXTERN_API(__type) extern __type
++#define JS_EXPORT_API(__type) __type
++#define JS_EXTERN_DATA(__type) extern __type
++#define JS_EXPORT_DATA(__type) __type
++
++#define JS_DLL_CALLBACK
++#define JS_STATIC_DLL_CALLBACK(__x) static __x
++
+ #else /* Unix */
+
+ #ifdef HAVE_VISIBILITY_ATTRIBUTE
+@@ -241,11 +256,11 @@
+
+ #if (defined(XP_WIN) && !defined(CROSS_COMPILE)) || defined (WINCE)
+ # include "jscpucfg.h" /* Use standard Mac or Windows configuration */
+-#elif defined(XP_UNIX) || defined(XP_BEOS) || defined(XP_OS2) || defined(CROSS_COMPILE)
++#elif defined(XP_UNIX) || defined(XP_AMIGA) || defined(XP_BEOS) || defined(XP_OS2) || defined(CROSS_COMPILE)
+ # include "jsautocfg.h" /* Use auto-detected configuration */
+ # include "jsosdep.h" /* ...and platform-specific flags */
+ #else
+-# error "Must define one of XP_BEOS, XP_OS2, XP_WIN or XP_UNIX"
++# error "Must define one of XP_BEOS, XP_OS2, XP_AMIGA, XP_WIN or XP_UNIX"
+ #endif
+
+ JS_BEGIN_EXTERN_C
+
diff --git a/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/prmjtime.c.p b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/prmjtime.c.p
new file mode 100644
index 0000000..616fe81
--- /dev/null
+++ b/sdk/recipes/patches/spidermonkey/ppc-amigaos-1.7.0/prmjtime.c.p
@@ -0,0 +1,54 @@
+--- js/src/prmjtime.c 2005-07-07 22:35:39
++++ js-amiga/src/prmjtime.c 2012-07-06 21:22:31
+@@ -89,13 +89,17 @@ static void PRMJ_basetime(JSInt64 tsecs,
+ JSInt32
+ PRMJ_LocalGMTDifference()
+ {
+-#if defined(XP_UNIX) || defined(XP_WIN) || defined(XP_OS2) || defined(XP_BEOS)
++#if defined(XP_UNIX) || defined(XP_WIN) || defined(XP_OS2) || defined(XP_BEOS) || defined(XP_AMIGA)
+ struct tm ltime;
+
+ /* get the difference between this time zone and GMT */
+ memset((char *)&ltime,0,sizeof(ltime));
+ ltime.tm_mday = 2;
++#ifdef XP_AMIGA
++ ltime.tm_year = 78;
++#else
+ ltime.tm_year = 70;
++#endif
+ #ifdef SUNOS4
+ ltime.tm_zone = 0;
+ ltime.tm_gmtoff = 0;
+@@ -158,11 +162,21 @@ PRMJ_Now(void)
+ ten = JSLL_INIT(0, 10);
+ FILETIME time, midnight;
+ #endif
+-#if defined(XP_UNIX) || defined(XP_BEOS)
++#if defined(XP_UNIX) || defined(XP_BEOS) || defined(XP_AMIGA)
+ struct timeval tv;
+ JSInt64 s, us, s2us;
+ #endif /* XP_UNIX */
+
++#if defined(XP_AMIGA)
++ gettimeofday(&tv, 0);
++ JSLL_UI2L(s2us, PRMJ_USEC_PER_SEC);
++ JSLL_UI2L(s, tv.tv_sec);
++ JSLL_UI2L(us, tv.tv_usec);
++ JSLL_MUL(s, s, s2us);
++ JSLL_ADD(s, s, us);
++ return s;
++#endif
++
+ #ifdef XP_OS2
+ ftime(&b);
+ JSLL_UI2L(ms2us, PRMJ_USEC_PER_MSEC);
+@@ -268,7 +282,7 @@ PRMJ_DSTOffset(JSInt64 local_time)
+ size_t
+ PRMJ_FormatTime(char *buf, int buflen, char *fmt, PRMJTime *prtm)
+ {
+-#if defined(XP_UNIX) || defined(XP_WIN) || defined(XP_OS2) || defined(XP_BEOS)
++#if defined(XP_UNIX) || defined(XP_WIN) || defined(XP_OS2) || defined(XP_BEOS) || defined(XP_AMIGA)
+ struct tm a;
+
+ /* Zero out the tm struct. Linux, SunOS 4 struct tm has extra members int
+