diff --git a/b2g/app/nsBrowserApp.cpp b/b2g/app/nsBrowserApp.cpp
index e1a4875b2a4..38354a66584 100644
--- a/b2g/app/nsBrowserApp.cpp
+++ b/b2g/app/nsBrowserApp.cpp
@@ -42,6 +42,7 @@
#endif
#include "mozilla/Telemetry.h"
+#include "mozilla/WindowsDllBlocklist.h"
static void Output(const char *fmt, ... )
{
@@ -92,9 +93,6 @@ public:
XRE_GetFileFromPathType XRE_GetFileFromPath;
XRE_CreateAppDataType XRE_CreateAppData;
XRE_FreeAppDataType XRE_FreeAppData;
-#ifdef XRE_HAS_DLL_BLOCKLIST
-XRE_SetupDllBlocklistType XRE_SetupDllBlocklist;
-#endif
XRE_TelemetryAccumulateType XRE_TelemetryAccumulate;
XRE_mainType XRE_main;
@@ -102,9 +100,6 @@ static const nsDynamicFunctionLoad kXULFuncs[] = {
{ "XRE_GetFileFromPath", (NSFuncPtr*) &XRE_GetFileFromPath },
{ "XRE_CreateAppData", (NSFuncPtr*) &XRE_CreateAppData },
{ "XRE_FreeAppData", (NSFuncPtr*) &XRE_FreeAppData },
-#ifdef XRE_HAS_DLL_BLOCKLIST
- { "XRE_SetupDllBlocklist", (NSFuncPtr*) &XRE_SetupDllBlocklist },
-#endif
{ "XRE_TelemetryAccumulate", (NSFuncPtr*) &XRE_TelemetryAccumulate },
{ "XRE_main", (NSFuncPtr*) &XRE_main },
{ nullptr, nullptr }
@@ -210,6 +205,10 @@ int main(int argc, char* argv[])
gotCounters = GetProcessIoCounters(GetCurrentProcess(), &ioCounters);
#endif
+#ifdef HAS_DLL_BLOCKLIST
+ DllBlocklist_Initialize();
+#endif
+
// We do this because of data in bug 771745
XPCOMGlueEnablePreload();
@@ -227,10 +226,6 @@ int main(int argc, char* argv[])
return 255;
}
-#ifdef XRE_HAS_DLL_BLOCKLIST
- XRE_SetupDllBlocklist();
-#endif
-
if (gotCounters) {
#if defined(XP_WIN)
XRE_TelemetryAccumulate(mozilla::Telemetry::EARLY_GLUESTARTUP_READ_OPS,
diff --git a/browser/app/nsBrowserApp.cpp b/browser/app/nsBrowserApp.cpp
index 9dee6248258..a452a9dc1c1 100644
--- a/browser/app/nsBrowserApp.cpp
+++ b/browser/app/nsBrowserApp.cpp
@@ -46,6 +46,7 @@
#include "nsXPCOMPrivate.h" // for MAXPATHLEN and XPCOM_DLL
#include "mozilla/Telemetry.h"
+#include "mozilla/WindowsDllBlocklist.h"
using namespace mozilla;
@@ -78,9 +79,19 @@ static void Output(const char *fmt, ... )
#if MOZ_WINCONSOLE
fwprintf_s(stderr, wide_msg);
#else
- MessageBoxW(nullptr, wide_msg, L"Firefox", MB_OK
- | MB_ICONERROR
- | MB_SETFOREGROUND);
+ // Linking user32 at load-time interferes with the DLL blocklist (bug 932100).
+ // This is a rare codepath, so we can load user32 at run-time instead.
+ HMODULE user32 = LoadLibraryW(L"user32.dll");
+ if (user32) {
+ typedef int (WINAPI * MessageBoxWFn)(HWND, LPCWSTR, LPCWSTR, UINT);
+ MessageBoxWFn messageBoxW = (MessageBoxWFn)GetProcAddress(user32, "MessageBoxW");
+ if (messageBoxW) {
+ messageBoxW(nullptr, wide_msg, L"Firefox", MB_OK
+ | MB_ICONERROR
+ | MB_SETFOREGROUND);
+ }
+ FreeLibrary(user32);
+ }
#endif
#endif
@@ -144,9 +155,6 @@ static void AttachToTestHarness()
XRE_GetFileFromPathType XRE_GetFileFromPath;
XRE_CreateAppDataType XRE_CreateAppData;
XRE_FreeAppDataType XRE_FreeAppData;
-#ifdef XRE_HAS_DLL_BLOCKLIST
-XRE_SetupDllBlocklistType XRE_SetupDllBlocklist;
-#endif
XRE_TelemetryAccumulateType XRE_TelemetryAccumulate;
XRE_StartupTimelineRecordType XRE_StartupTimelineRecord;
XRE_mainType XRE_main;
@@ -156,9 +164,6 @@ static const nsDynamicFunctionLoad kXULFuncs[] = {
{ "XRE_GetFileFromPath", (NSFuncPtr*) &XRE_GetFileFromPath },
{ "XRE_CreateAppData", (NSFuncPtr*) &XRE_CreateAppData },
{ "XRE_FreeAppData", (NSFuncPtr*) &XRE_FreeAppData },
-#ifdef XRE_HAS_DLL_BLOCKLIST
- { "XRE_SetupDllBlocklist", (NSFuncPtr*) &XRE_SetupDllBlocklist },
-#endif
{ "XRE_TelemetryAccumulate", (NSFuncPtr*) &XRE_TelemetryAccumulate },
{ "XRE_StartupTimelineRecord", (NSFuncPtr*) &XRE_StartupTimelineRecord },
{ "XRE_main", (NSFuncPtr*) &XRE_main },
@@ -597,6 +602,17 @@ int main(int argc, char* argv[])
nsIFile *xreDirectory;
+#ifdef HAS_DLL_BLOCKLIST
+ DllBlocklist_Initialize();
+
+ // In order to be effective against AppInit DLLs, the blocklist must be
+ // initialized before user32.dll is loaded into the process. If this assert
+ // ever fires, then the fix for bug 932100 has been defeated and the
+ // blocklist will miss AppInit DLLs. You should use a delayload or reorder
+ // the code to prevent user32.dll from loading during early startup.
+ MOZ_ASSERT(!GetModuleHandleA("user32.dll"));
+#endif
+
nsresult rv = InitXPCOMGlue(argv[0], &xreDirectory);
if (NS_FAILED(rv)) {
return 255;
@@ -604,10 +620,6 @@ int main(int argc, char* argv[])
XRE_StartupTimelineRecord(mozilla::StartupTimeline::START, start);
-#ifdef XRE_HAS_DLL_BLOCKLIST
- XRE_SetupDllBlocklist();
-#endif
-
if (gotCounters) {
#if defined(XP_WIN)
XRE_TelemetryAccumulate(mozilla::Telemetry::EARLY_GLUESTARTUP_READ_OPS,
diff --git a/config/rules.mk b/config/rules.mk
index 93cd9426e73..42d10170b03 100644
--- a/config/rules.mk
+++ b/config/rules.mk
@@ -800,7 +800,7 @@ else # !WINNT || GNU_CC
endif # WINNT && !GNU_CC
ifdef ENABLE_STRIP
- $(STRIP) $@
+ $(STRIP) $(STRIP_FLAGS) $@
endif
ifdef MOZ_POST_PROGRAM_COMMAND
$(MOZ_POST_PROGRAM_COMMAND) $@
@@ -856,7 +856,7 @@ else
endif # WINNT && !GNU_CC
ifdef ENABLE_STRIP
- $(STRIP) $@
+ $(STRIP) $(STRIP_FLAGS) $@
endif
ifdef MOZ_POST_PROGRAM_COMMAND
$(MOZ_POST_PROGRAM_COMMAND) $@
@@ -883,7 +883,6 @@ $(filter %.$(LIB_SUFFIX),$(LIBRARY)): $(OBJS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
$(REPORT_BUILD)
$(RM) $(LIBRARY)
$(EXPAND_AR) $(AR_FLAGS) $(OBJS) $(SHARED_LIBRARY_LIBS)
- $(RANLIB) $@
$(filter-out %.$(LIB_SUFFIX),$(LIBRARY)): $(filter %.$(LIB_SUFFIX),$(LIBRARY)) $(OBJS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
# When we only build a library descriptor, blow out any existing library
@@ -917,14 +916,12 @@ $(IMPORT_LIBRARY): $(SHARED_LIBRARY)
$(REPORT_BUILD)
$(RM) $@
$(IMPLIB) $@ $^
- $(RANLIB) $@
endif # OS/2
$(HOST_LIBRARY): $(HOST_OBJS) Makefile
$(REPORT_BUILD)
$(RM) $@
$(EXPAND_LIBS_EXEC) --extract -- $(HOST_AR) $(HOST_AR_FLAGS) $(HOST_OBJS)
- $(HOST_RANLIB) $@
ifdef HAVE_DTRACE
ifndef XP_MACOSX
@@ -975,7 +972,7 @@ endif # WINNT && !GCC
@$(RM) foodummyfilefoo $(DELETE_AFTER_LINK)
chmod +x $@
ifdef ENABLE_STRIP
- $(STRIP) $@
+ $(STRIP) $(STRIP_FLAGS) $@
endif
ifdef MOZ_POST_DSO_LIB_COMMAND
$(MOZ_POST_DSO_LIB_COMMAND) $@
diff --git a/configure.in b/configure.in
index 12cd4eb112f..048f99023ac 100644
--- a/configure.in
+++ b/configure.in
@@ -306,7 +306,7 @@ dnl to use the cross-compile setup for now
dnl ========================================================
dnl AR_FLAGS set here so HOST_AR_FLAGS can be set correctly (see bug 538269)
-AR_FLAGS='cr $@'
+AR_FLAGS='crs $@'
if test "$COMPILE_ENVIRONMENT"; then
@@ -8872,7 +8872,27 @@ dnl so that regeneration via dependencies works correctly
WEBRTC_CONFIG="${WEBRTC_CONFIG} -D have_ethtool_cmd_speed_hi=0"
fi
- GYP_WEBRTC_OPTIONS="--format=mozmake ${WEBRTC_CONFIG} -D target_arch=${WEBRTC_TARGET_ARCH} ${EXTRA_GYP_DEFINES} --depth=${srcdir}/media/webrtc/trunk --toplevel-dir=${srcdir} -G OBJDIR=${_objdir}"
+ if test -n "$CROSS_COMPILE"; then
+ case "$target" in
+ *-mingw*)
+ GYP_MOZMAKE_OPTIONS="-G os=win"
+ ;;
+ *-darwin*)
+ GYP_MOZMAKE_OPTIONS="-G os=mac"
+ if test "$MACOS_SDK_DIR"; then
+ GYP_MOZMAKE_OPTIONS="${GYP_MOZMAKE_OPTIONS} -D mac_sdk_path=$MACOS_SDK_DIR"
+ fi
+ ;;
+ *-android*)
+ GYP_MOZMAKE_OPTIONS="-G os=linux"
+ ;;
+ *)
+ AC_MSG_ERROR([Don't know what options to give to WebRTC for cross-compilation])
+ ;;
+ esac
+ fi
+
+ GYP_WEBRTC_OPTIONS="--format=mozmake ${GYP_MOZMAKE_OPTIONS} ${WEBRTC_CONFIG} -D target_arch=${WEBRTC_TARGET_ARCH} ${EXTRA_GYP_DEFINES} --depth=${srcdir}/media/webrtc/trunk --toplevel-dir=${srcdir} -G OBJDIR=${_objdir}"
$PYTHON ${srcdir}/media/webrtc/trunk/build/gyp_chromium \
$GYP_WEBRTC_OPTIONS \
diff --git a/content/base/test/csp/test_policyuri_regression_from_multipolicy.html b/content/base/test/csp/test_policyuri_regression_from_multipolicy.html
index 2b2b59e9027..0cb040cbec0 100644
--- a/content/base/test/csp/test_policyuri_regression_from_multipolicy.html
+++ b/content/base/test/csp/test_policyuri_regression_from_multipolicy.html
@@ -15,12 +15,14 @@
SpecialPowers.pushPrefEnv(
{'set':[["security.csp.speccompliant", true]]},
function() {
+ SimpleTest.waitForExplicitFinish();
var testframe = document.getElementById('testframe');
testframe.src = 'file_policyuri_regression_from_multipolicy.html';
testframe.addEventListener('load', function checkInlineScriptExecuted () {
is(this.contentDocument.getElementById('testdiv').innerHTML,
'Inline Script Executed',
'Inline script should execute (it would be blocked by the policy, but the policy is report-only)');
+ SimpleTest.finish();
});
}
);
diff --git a/content/canvas/src/WebGLContextGL.cpp b/content/canvas/src/WebGLContextGL.cpp
index af2ee6087f9..df9de19d6d7 100644
--- a/content/canvas/src/WebGLContextGL.cpp
+++ b/content/canvas/src/WebGLContextGL.cpp
@@ -2716,6 +2716,7 @@ WebGLContext::Uniform1i(WebGLUniformLocation *location_object, GLint a1)
if (!ValidateUniformSetter("Uniform1i", location_object, location))
return;
+ // Only uniform1i can take sampler settings.
if (!ValidateSamplerUniformSetter("Uniform1i", location_object, a1))
return;
@@ -2731,12 +2732,6 @@ WebGLContext::Uniform2i(WebGLUniformLocation *location_object, GLint a1,
if (!ValidateUniformSetter("Uniform2i", location_object, location))
return;
- if (!ValidateSamplerUniformSetter("Uniform2i", location_object, a1) ||
- !ValidateSamplerUniformSetter("Uniform2i", location_object, a2))
- {
- return;
- }
-
MakeContextCurrent();
gl->fUniform2i(location, a1, a2);
}
@@ -2749,13 +2744,6 @@ WebGLContext::Uniform3i(WebGLUniformLocation *location_object, GLint a1,
if (!ValidateUniformSetter("Uniform3i", location_object, location))
return;
- if (!ValidateSamplerUniformSetter("Uniform3i", location_object, a1) ||
- !ValidateSamplerUniformSetter("Uniform3i", location_object, a2) ||
- !ValidateSamplerUniformSetter("Uniform3i", location_object, a3))
- {
- return;
- }
-
MakeContextCurrent();
gl->fUniform3i(location, a1, a2, a3);
}
@@ -2768,14 +2756,6 @@ WebGLContext::Uniform4i(WebGLUniformLocation *location_object, GLint a1,
if (!ValidateUniformSetter("Uniform4i", location_object, location))
return;
- if (!ValidateSamplerUniformSetter("Uniform4i", location_object, a1) ||
- !ValidateSamplerUniformSetter("Uniform4i", location_object, a2) ||
- !ValidateSamplerUniformSetter("Uniform4i", location_object, a3) ||
- !ValidateSamplerUniformSetter("Uniform4i", location_object, a4))
- {
- return;
- }
-
MakeContextCurrent();
gl->fUniform4i(location, a1, a2, a3, a4);
}
diff --git a/content/html/content/test/file_iframe_sandbox_d_if5.html b/content/html/content/test/file_iframe_sandbox_d_if5.html
index bf08d5b7bf9..ba31053ad0e 100644
--- a/content/html/content/test/file_iframe_sandbox_d_if5.html
+++ b/content/html/content/test/file_iframe_sandbox_d_if5.html
@@ -8,8 +8,8 @@
diff --git a/content/html/content/test/test_iframe_sandbox_navigation.html b/content/html/content/test/test_iframe_sandbox_navigation.html
index 64f1cc812b6..dca2f0277bb 100644
--- a/content/html/content/test/test_iframe_sandbox_navigation.html
+++ b/content/html/content/test/test_iframe_sandbox_navigation.html
@@ -267,8 +267,8 @@ function doIf10TestPart2() {
+
-
diff --git a/dom/base/nsWrapperCache.cpp b/dom/base/nsWrapperCache.cpp
index 49efa8c54ca..4531145e133 100644
--- a/dom/base/nsWrapperCache.cpp
+++ b/dom/base/nsWrapperCache.cpp
@@ -55,7 +55,8 @@ public:
{
}
NS_IMETHOD_(void) DescribeGCedNode(bool aIsMarked,
- const char* aObjName)
+ const char* aObjName,
+ uint64_t aCompartmentAddress)
{
}
diff --git a/dom/media/PeerConnection.js b/dom/media/PeerConnection.js
index ee0aced29d7..95107fe5aa1 100644
--- a/dom/media/PeerConnection.js
+++ b/dom/media/PeerConnection.js
@@ -490,13 +490,17 @@ RTCPeerConnection.prototype = {
constraints = {};
}
this._mustValidateConstraints(constraints, "createOffer passed invalid constraints");
- this._onCreateOfferSuccess = onSuccess;
- this._onCreateOfferFailure = onError;
- this._queueOrRun({ func: this._createOffer, args: [constraints], wait: true });
+ this._queueOrRun({
+ func: this._createOffer,
+ args: [onSuccess, onError, constraints],
+ wait: true
+ });
},
- _createOffer: function(constraints) {
+ _createOffer: function(onSuccess, onError, constraints) {
+ this._onCreateOfferSuccess = onSuccess;
+ this._onCreateOfferFailure = onError;
this._getPC().createOffer(constraints);
},
@@ -542,12 +546,6 @@ RTCPeerConnection.prototype = {
},
setLocalDescription: function(desc, onSuccess, onError) {
- // TODO -- if we have two setLocalDescriptions in the
- // queue,this code overwrites the callbacks for the first
- // one with the callbacks for the second one. See Bug 831759.
- this._onSetLocalDescriptionSuccess = onSuccess;
- this._onSetLocalDescriptionFailure = onError;
-
let type;
switch (desc.type) {
case "offer":
@@ -565,23 +563,19 @@ RTCPeerConnection.prototype = {
this._queueOrRun({
func: this._setLocalDescription,
- args: [type, desc.sdp],
+ args: [type, desc.sdp, onSuccess, onError],
wait: true,
type: desc.type
});
},
- _setLocalDescription: function(type, sdp) {
+ _setLocalDescription: function(type, sdp, onSuccess, onError) {
+ this._onSetLocalDescriptionSuccess = onSuccess;
+ this._onSetLocalDescriptionFailure = onError;
this._getPC().setLocalDescription(type, sdp);
},
setRemoteDescription: function(desc, onSuccess, onError) {
- // TODO -- if we have two setRemoteDescriptions in the
- // queue, this code overwrites the callbacks for the first
- // one with the callbacks for the second one. See Bug 831759.
- this._onSetRemoteDescriptionSuccess = onSuccess;
- this._onSetRemoteDescriptionFailure = onError;
-
let type;
switch (desc.type) {
case "offer":
@@ -599,13 +593,15 @@ RTCPeerConnection.prototype = {
this._queueOrRun({
func: this._setRemoteDescription,
- args: [type, desc.sdp],
+ args: [type, desc.sdp, onSuccess, onError],
wait: true,
type: desc.type
});
},
- _setRemoteDescription: function(type, sdp) {
+ _setRemoteDescription: function(type, sdp, onSuccess, onError) {
+ this._onSetRemoteDescriptionSuccess = onSuccess;
+ this._onSetRemoteDescriptionFailure = onError;
this._getPC().setRemoteDescription(type, sdp);
},
diff --git a/editor/composer/src/moz.build b/editor/composer/src/moz.build
index 96426d6b702..4dd75d8caf3 100644
--- a/editor/composer/src/moz.build
+++ b/editor/composer/src/moz.build
@@ -6,7 +6,7 @@
MODULE = 'editor'
-SOURCES += [
+UNIFIED_SOURCES += [
'nsComposerCommands.cpp',
'nsComposerCommandsUpdater.cpp',
'nsComposerController.cpp',
diff --git a/editor/libeditor/base/CreateElementTxn.cpp b/editor/libeditor/base/CreateElementTxn.cpp
index 1e37bb0ebcb..c4440708ba3 100644
--- a/editor/libeditor/base/CreateElementTxn.cpp
+++ b/editor/libeditor/base/CreateElementTxn.cpp
@@ -23,10 +23,6 @@
#include "nsAString.h"
#include
-#ifdef DEBUG
-static bool gNoisy = false;
-#endif
-
using namespace mozilla;
CreateElementTxn::CreateElementTxn()
@@ -61,16 +57,6 @@ NS_IMETHODIMP CreateElementTxn::Init(nsEditor *aEditor,
NS_IMETHODIMP CreateElementTxn::DoTransaction(void)
{
-#ifdef DEBUG
- if (gNoisy)
- {
- char* nodename = ToNewCString(mTag);
- printf("Do Create Element parent = %p <%s>, offset = %d\n",
- static_cast(mParent.get()), nodename, mOffsetInParent);
- nsMemory::Free(nodename);
- }
-#endif
-
NS_ASSERTION(mEditor && mParent, "bad state");
NS_ENSURE_TRUE(mEditor && mParent, NS_ERROR_NOT_INITIALIZED);
@@ -85,13 +71,6 @@ NS_IMETHODIMP CreateElementTxn::DoTransaction(void)
// Try to insert formatting whitespace for the new node:
mEditor->MarkNodeDirty(mNewNode);
-#ifdef DEBUG
- if (gNoisy)
- {
- printf(" newNode = %p\n", static_cast(mNewNode.get()));
- }
-#endif
-
// insert the new node
if (CreateElementTxn::eAppend == int32_t(mOffsetInParent)) {
ErrorResult rv;
@@ -133,15 +112,6 @@ NS_IMETHODIMP CreateElementTxn::DoTransaction(void)
NS_IMETHODIMP CreateElementTxn::UndoTransaction(void)
{
-#ifdef DEBUG
- if (gNoisy)
- {
- printf("Undo Create Element, mParent = %p, node = %p\n",
- static_cast(mParent.get()),
- static_cast(mNewNode.get()));
- }
-#endif
-
NS_ASSERTION(mEditor && mParent, "bad state");
NS_ENSURE_TRUE(mEditor && mParent, NS_ERROR_NOT_INITIALIZED);
@@ -152,10 +122,6 @@ NS_IMETHODIMP CreateElementTxn::UndoTransaction(void)
NS_IMETHODIMP CreateElementTxn::RedoTransaction(void)
{
-#ifdef DEBUG
- if (gNoisy) { printf("Redo Create Element\n"); }
-#endif
-
NS_ASSERTION(mEditor && mParent, "bad state");
NS_ENSURE_TRUE(mEditor && mParent, NS_ERROR_NOT_INITIALIZED);
diff --git a/editor/libeditor/base/InsertElementTxn.cpp b/editor/libeditor/base/InsertElementTxn.cpp
index 5d5df7ed108..1043cd1d8ac 100644
--- a/editor/libeditor/base/InsertElementTxn.cpp
+++ b/editor/libeditor/base/InsertElementTxn.cpp
@@ -19,11 +19,6 @@
using namespace mozilla;
-#ifdef DEBUG
-static bool gNoisy = false;
-#endif
-
-
InsertElementTxn::InsertElementTxn()
: EditTxn()
{
@@ -57,23 +52,6 @@ NS_IMETHODIMP InsertElementTxn::Init(nsINode *aNode,
NS_IMETHODIMP InsertElementTxn::DoTransaction(void)
{
-#ifdef DEBUG
- if (gNoisy)
- {
- nsCOMPtrnodeAsContent = do_QueryInterface(mNode);
- nsCOMPtrparentAsContent = do_QueryInterface(mParent);
- nsString namestr = mNode->NodeName();
- char* nodename = ToNewCString(namestr);
- printf("%p Do Insert Element of %p <%s> into parent %p at offset %d\n",
- static_cast(this),
- static_cast(nodeAsContent.get()),
- nodename,
- static_cast(parentAsContent.get()),
- mOffset);
- nsMemory::Free(nodename);
- }
-#endif
-
NS_ENSURE_TRUE(mNode && mParent, NS_ERROR_NOT_INITIALIZED);
nsCOMPtr parent = do_QueryInterface(mParent);
@@ -115,17 +93,6 @@ NS_IMETHODIMP InsertElementTxn::DoTransaction(void)
NS_IMETHODIMP InsertElementTxn::UndoTransaction(void)
{
-#ifdef DEBUG
- if (gNoisy)
- {
- printf("%p Undo Insert Element of %p into parent %p at offset %d\n",
- static_cast(this),
- static_cast(mNode.get()),
- static_cast(mParent.get()),
- mOffset);
- }
-#endif
-
NS_ENSURE_TRUE(mNode && mParent, NS_ERROR_NOT_INITIALIZED);
ErrorResult rv;
diff --git a/editor/libeditor/base/InsertTextTxn.cpp b/editor/libeditor/base/InsertTextTxn.cpp
index 2722be8279b..af61724c5ae 100644
--- a/editor/libeditor/base/InsertTextTxn.cpp
+++ b/editor/libeditor/base/InsertTextTxn.cpp
@@ -15,10 +15,6 @@
#include "nsISupportsUtils.h" // for NS_ADDREF_THIS, NS_RELEASE
#include "nsITransaction.h" // for nsITransaction
-#ifdef DEBUG
-static bool gNoisy = false;
-#endif
-
InsertTextTxn::InsertTextTxn()
: EditTxn()
{
@@ -62,14 +58,6 @@ NS_IMETHODIMP InsertTextTxn::Init(nsIDOMCharacterData *aElement,
NS_IMETHODIMP InsertTextTxn::DoTransaction(void)
{
-#ifdef DEBUG
- if (gNoisy)
- {
- printf("Do Insert Text element = %p\n",
- static_cast(mElement.get()));
- }
-#endif
-
NS_ASSERTION(mElement && mEditor, "bad state");
if (!mElement || !mEditor) { return NS_ERROR_NOT_INITIALIZED; }
@@ -98,14 +86,6 @@ NS_IMETHODIMP InsertTextTxn::DoTransaction(void)
NS_IMETHODIMP InsertTextTxn::UndoTransaction(void)
{
-#ifdef DEBUG
- if (gNoisy)
- {
- printf("Undo Insert Text element = %p\n",
- static_cast(mElement.get()));
- }
-#endif
-
NS_ASSERTION(mElement && mEditor, "bad state");
if (!mElement || !mEditor) { return NS_ERROR_NOT_INITIALIZED; }
@@ -133,13 +113,6 @@ NS_IMETHODIMP InsertTextTxn::Merge(nsITransaction *aTransaction, bool *aDidMerge
otherInsTxn->GetData(otherData);
mStringToInsert += otherData;
*aDidMerge = true;
-#ifdef DEBUG
- if (gNoisy)
- {
- printf("InsertTextTxn assimilated %p\n",
- static_cast(aTransaction));
- }
-#endif
}
NS_RELEASE(otherInsTxn);
}
diff --git a/editor/libeditor/base/JoinElementTxn.cpp b/editor/libeditor/base/JoinElementTxn.cpp
index ee92b9e2984..e37f32c8cee 100644
--- a/editor/libeditor/base/JoinElementTxn.cpp
+++ b/editor/libeditor/base/JoinElementTxn.cpp
@@ -17,10 +17,6 @@
using namespace mozilla;
-#ifdef DEBUG
-static bool gNoisy = false;
-#endif
-
JoinElementTxn::JoinElementTxn()
: EditTxn()
{
@@ -54,16 +50,6 @@ NS_IMETHODIMP JoinElementTxn::Init(nsEditor *aEditor,
// After DoTransaction() and RedoTransaction(), the left node is removed from the content tree and right node remains.
NS_IMETHODIMP JoinElementTxn::DoTransaction(void)
{
-#ifdef DEBUG
- if (gNoisy)
- {
- printf("%p Do Join of %p and %p\n",
- static_cast(this),
- static_cast(mLeftNode.get()),
- static_cast(mRightNode.get()));
- }
-#endif
-
NS_PRECONDITION((mEditor && mLeftNode && mRightNode), "null arg");
if (!mEditor || !mLeftNode || !mRightNode) { return NS_ERROR_NOT_INITIALIZED; }
@@ -85,30 +71,13 @@ NS_IMETHODIMP JoinElementTxn::DoTransaction(void)
mParent = leftParent;
mOffset = mLeftNode->Length();
- nsresult rv = mEditor->JoinNodesImpl(mRightNode, mLeftNode, mParent);
-
-#ifdef DEBUG
- if (NS_SUCCEEDED(rv) && gNoisy) {
- printf(" left node = %p removed\n", static_cast(mLeftNode.get()));
- }
-#endif
-
- return rv;
+ return mEditor->JoinNodesImpl(mRightNode, mLeftNode, mParent);
}
//XXX: what if instead of split, we just deleted the unneeded children of mRight
// and re-inserted mLeft?
NS_IMETHODIMP JoinElementTxn::UndoTransaction(void)
{
-#ifdef DEBUG
- if (gNoisy)
- {
- printf("%p Undo Join, right node = %p\n",
- static_cast(this),
- static_cast(mRightNode.get()));
- }
-#endif
-
NS_ASSERTION(mRightNode && mLeftNode && mParent, "bad state");
if (!mRightNode || !mLeftNode || !mParent) { return NS_ERROR_NOT_INITIALIZED; }
// first, massage the existing node so it is in its post-split state
diff --git a/editor/libeditor/base/SplitElementTxn.cpp b/editor/libeditor/base/SplitElementTxn.cpp
index fea95f5601e..4023abde885 100644
--- a/editor/libeditor/base/SplitElementTxn.cpp
+++ b/editor/libeditor/base/SplitElementTxn.cpp
@@ -18,11 +18,6 @@
using namespace mozilla;
-#ifdef DEBUG
-static bool gNoisy = false;
-#endif
-
-
// note that aEditor is not refcounted
SplitElementTxn::SplitElementTxn()
: EditTxn()
@@ -53,16 +48,6 @@ NS_IMETHODIMP SplitElementTxn::Init(nsEditor *aEditor,
NS_IMETHODIMP SplitElementTxn::DoTransaction(void)
{
-#ifdef DEBUG
- if (gNoisy)
- {
- printf("%p Do Split of node %p offset %d\n",
- static_cast(this),
- static_cast(mExistingRightNode.get()),
- mOffset);
- }
-#endif
-
NS_ASSERTION(mExistingRightNode && mEditor, "bad state");
if (!mExistingRightNode || !mEditor) { return NS_ERROR_NOT_INITIALIZED; }
@@ -74,14 +59,6 @@ NS_IMETHODIMP SplitElementTxn::DoTransaction(void)
NS_ENSURE_TRUE(mNewLeftNode, NS_ERROR_NULL_POINTER);
mEditor->MarkNodeDirty(mExistingRightNode);
-#ifdef DEBUG
- if (gNoisy)
- {
- printf(" created left node = %p\n",
- static_cast(mNewLeftNode.get()));
- }
-#endif
-
// get the parent node
mParent = mExistingRightNode->GetParentNode();
NS_ENSURE_TRUE(mParent, NS_ERROR_NULL_POINTER);
@@ -113,43 +90,13 @@ NS_IMETHODIMP SplitElementTxn::DoTransaction(void)
NS_IMETHODIMP SplitElementTxn::UndoTransaction(void)
{
-#ifdef DEBUG
- if (gNoisy) {
- printf("%p Undo Split of existing node %p and new node %p offset %d\n",
- static_cast(this),
- static_cast(mExistingRightNode.get()),
- static_cast(mNewLeftNode.get()),
- mOffset);
- }
-#endif
-
NS_ASSERTION(mEditor && mExistingRightNode && mNewLeftNode && mParent, "bad state");
if (!mEditor || !mExistingRightNode || !mNewLeftNode || !mParent) {
return NS_ERROR_NOT_INITIALIZED;
}
// this assumes Do inserted the new node in front of the prior existing node
- nsresult rv = mEditor->JoinNodesImpl(mExistingRightNode, mNewLeftNode,
- mParent);
-#ifdef DEBUG
- if (gNoisy)
- {
- printf("** after join left child node %p into right node %p\n",
- static_cast(mNewLeftNode.get()),
- static_cast(mExistingRightNode.get()));
- if (gNoisy) {mEditor->DebugDumpContent(); } // DEBUG
- }
- if (NS_SUCCEEDED(rv))
- {
- if (gNoisy)
- {
- printf(" left node = %p removed\n",
- static_cast(mNewLeftNode.get()));
- }
- }
-#endif
-
- return rv;
+ return mEditor->JoinNodesImpl(mExistingRightNode, mNewLeftNode, mParent);
}
/* redo cannot simply resplit the right node, because subsequent transactions
@@ -162,32 +109,12 @@ NS_IMETHODIMP SplitElementTxn::RedoTransaction(void)
return NS_ERROR_NOT_INITIALIZED;
}
-#ifdef DEBUG
- if (gNoisy) {
- printf("%p Redo Split of existing node %p and new node %p offset %d\n",
- static_cast(this),
- static_cast(mExistingRightNode.get()),
- static_cast(mNewLeftNode.get()),
- mOffset);
- if (gNoisy) {mEditor->DebugDumpContent(); } // DEBUG
- }
-#endif
-
// first, massage the existing node so it is in its post-split state
nsCOMPtrrightNodeAsText = do_QueryInterface(mExistingRightNode);
if (rightNodeAsText)
{
nsresult result = rightNodeAsText->DeleteData(0, mOffset);
NS_ENSURE_SUCCESS(result, result);
-#ifdef DEBUG
- if (gNoisy)
- {
- printf("** after delete of text in right text node %p offset %d\n",
- static_cast(rightNodeAsText.get()),
- mOffset);
- mEditor->DebugDumpContent(); // DEBUG
- }
-#endif
}
else
{
@@ -201,16 +128,6 @@ NS_IMETHODIMP SplitElementTxn::RedoTransaction(void)
{
mNewLeftNode->AppendChild(*child, rv);
NS_ENSURE_SUCCESS(rv.ErrorCode(), rv.ErrorCode());
-#ifdef DEBUG
- if (gNoisy)
- {
- printf("** move child node %p from right node %p to left node %p\n",
- static_cast(child),
- static_cast(mExistingRightNode.get()),
- static_cast(mNewLeftNode.get()));
- if (gNoisy) {mEditor->DebugDumpContent(); } // DEBUG
- }
-#endif
}
child = child->GetNextSibling();
}
@@ -218,15 +135,6 @@ NS_IMETHODIMP SplitElementTxn::RedoTransaction(void)
// second, re-insert the left node into the tree
ErrorResult rv;
mParent->InsertBefore(*mNewLeftNode, mExistingRightNode, rv);
-#ifdef DEBUG
- if (gNoisy)
- {
- printf("** reinsert left child node %p before right node %p\n",
- static_cast(mNewLeftNode.get()),
- static_cast(mExistingRightNode.get()));
- if (gNoisy) {mEditor->DebugDumpContent(); } // DEBUG
- }
-#endif
return rv.ErrorCode();
}
diff --git a/editor/libeditor/base/moz.build b/editor/libeditor/base/moz.build
index 9426c63a424..eef991303ea 100644
--- a/editor/libeditor/base/moz.build
+++ b/editor/libeditor/base/moz.build
@@ -8,7 +8,7 @@ TEST_DIRS += ['tests']
MODULE = 'editor'
-SOURCES += [
+UNIFIED_SOURCES += [
'ChangeAttributeTxn.cpp',
'ChangeCSSInlineStyleTxn.cpp',
'CreateElementTxn.cpp',
diff --git a/editor/libeditor/base/nsEditor.cpp b/editor/libeditor/base/nsEditor.cpp
index 80879e36d94..f91d1de17e4 100644
--- a/editor/libeditor/base/nsEditor.cpp
+++ b/editor/libeditor/base/nsEditor.cpp
@@ -112,10 +112,6 @@ class nsIOutputStream;
class nsIParserService;
class nsITransferable;
-#ifdef NS_DEBUG_EDITOR
-static bool gNoisy = false;
-#endif
-
#ifdef DEBUG
#include "nsIDOMHTMLDocument.h" // for nsIDOMHTMLDocument
#endif
@@ -779,10 +775,6 @@ nsEditor::SetTransactionManager(nsITransactionManager *aTxnManager)
NS_IMETHODIMP
nsEditor::Undo(uint32_t aCount)
{
-#ifdef NS_DEBUG_EDITOR
- if (gNoisy) { printf("Editor::Undo ----------\n"); }
-#endif
-
ForceCompositionEnd();
bool hasTxnMgr, hasTransaction = false;
@@ -824,10 +816,6 @@ NS_IMETHODIMP nsEditor::CanUndo(bool *aIsEnabled, bool *aCanUndo)
NS_IMETHODIMP
nsEditor::Redo(uint32_t aCount)
{
-#ifdef NS_DEBUG_EDITOR
- if (gNoisy) { printf("Editor::Redo ----------\n"); }
-#endif
-
bool hasTxnMgr, hasTransaction = false;
CanRedo(&hasTxnMgr, &hasTransaction);
NS_ENSURE_TRUE(hasTransaction, NS_OK);
@@ -2714,10 +2702,6 @@ nsEditor::SplitNodeImpl(nsIDOMNode * aExistingRightNode,
nsIDOMNode* aNewLeftNode,
nsIDOMNode* aParent)
{
-#ifdef NS_DEBUG_EDITOR
- if (gNoisy) { printf("SplitNodeImpl: left=%p, right=%p, offset=%d\n", (void*)aNewLeftNode, (void*)aExistingRightNode, aOffset); }
-#endif
-
NS_ASSERTION(((nullptr!=aExistingRightNode) &&
(nullptr!=aNewLeftNode) &&
(nullptr!=aParent)),
diff --git a/editor/libeditor/html/moz.build b/editor/libeditor/html/moz.build
index b3bf8225b6c..0c38dfd44e3 100644
--- a/editor/libeditor/html/moz.build
+++ b/editor/libeditor/html/moz.build
@@ -8,7 +8,7 @@ TEST_DIRS += ['tests']
MODULE = 'editor'
-SOURCES += [
+UNIFIED_SOURCES += [
'nsEditProperty.cpp',
'nsHTMLAbsPosition.cpp',
'nsHTMLAnonymousUtils.cpp',
diff --git a/editor/libeditor/text/moz.build b/editor/libeditor/text/moz.build
index ad70d96677a..c4431e88a8f 100644
--- a/editor/libeditor/text/moz.build
+++ b/editor/libeditor/text/moz.build
@@ -8,7 +8,7 @@ TEST_DIRS += ['tests']
MODULE = 'editor'
-SOURCES += [
+UNIFIED_SOURCES += [
'nsInternetCiter.cpp',
'nsPlaintextDataTransfer.cpp',
'nsPlaintextEditor.cpp',
diff --git a/editor/txmgr/src/moz.build b/editor/txmgr/src/moz.build
index 5d8070760cc..07ab4bcda5e 100644
--- a/editor/txmgr/src/moz.build
+++ b/editor/txmgr/src/moz.build
@@ -6,7 +6,7 @@
MODULE = 'txmgr'
-SOURCES += [
+UNIFIED_SOURCES += [
'nsTransactionItem.cpp',
'nsTransactionList.cpp',
'nsTransactionManager.cpp',
diff --git a/editor/txtsvc/src/moz.build b/editor/txtsvc/src/moz.build
index 970dc52c6a8..2ff7258e951 100644
--- a/editor/txtsvc/src/moz.build
+++ b/editor/txtsvc/src/moz.build
@@ -6,7 +6,7 @@
MODULE = 'txtsvc'
-SOURCES += [
+UNIFIED_SOURCES += [
'nsFilteredContentIterator.cpp',
'nsTextServicesDocument.cpp',
]
diff --git a/extensions/spellcheck/locales/en-US/hunspell/dictionary-sources/upstream-hunspell.diff b/extensions/spellcheck/locales/en-US/hunspell/dictionary-sources/upstream-hunspell.diff
index 1b2107eaec0..3aafa2750bd 100644
--- a/extensions/spellcheck/locales/en-US/hunspell/dictionary-sources/upstream-hunspell.diff
+++ b/extensions/spellcheck/locales/en-US/hunspell/dictionary-sources/upstream-hunspell.diff
@@ -2137,14 +2137,18 @@
---
> D'Arcy
> D/MN
-2424a3788
+2418a3782
+> DRM
+2422a3787
+> DVR/S
+2424a3790
> Dacey/M
-2425a3790,3791
+2425a3792,3793
> Dacia
> Dacie/M
-2426a3793
+2426a3795
> Dacy/M
-2429a3797,3803
+2429a3799,3805
> Dael/M
> Daffi/M
> Daffie/M
@@ -2152,221 +2156,221 @@
> Dag/M
> Dagmar/M
> Dagny/M
-2431a3806
+2431a3808
> Dahlia/M
-2432a3808
+2432a3810
> Daile/M
-2433a3810,3812
+2433a3812,3814
> Daisey/M
> Daisi/M
> Daisie/M
-2437a3817
+2437a3819
> Dal/M
-2438a3819
+2438a3821
> Dalenna/M
-2440c3821,3822
+2440c3823,3824
< Dali
---
> Dali/S
> Dalia/M
-2441a3824,3825
+2441a3826,3827
> Dalila/M
> Dall/M
-2442a3827,3828
+2442a3829,3830
> Dalli/MS
> Dallon/M
-2444a3831,3833
+2444a3833,3835
> Daloris/M
> Dalston/M
> Dalt/M
-2445a3835,3836
+2445a3837,3838
> Damara/M
> Damaris/M
-2448a3840
+2448a3842
> Damiano/M
-2450a3843
+2450a3845
> Damita/M
-2457a3851,3853
+2457a3853,3855
> Danell/M
> Danella/M
> Danette/M
-2458a3855,3856
+2458a3857,3858
> Dani/M
> Dania/M
-2459a3858,3860
+2459a3860,3862
> Danica/M
> Danice/M
> Danie/M
-2460a3862,3864
+2460a3864,3866
> Daniela/M
> Daniele/M
> Daniella/M
-2461a3866,3867
+2461a3868,3869
> Danika/M
> Danila/M
-2462a3869,3873
+2462a3871,3875
> Danit/M
> Danita/M
> Danna/M
> Dannel/M
> Danni/M
-2464a3876
+2464a3878
> Dannye/M
-2469a3882,3886
+2469a3884,3888
> Danya/M
> Danyelle/M
> Danyette/M
> Daphene/M
> Daphna/M
-2470a3888,3892
+2470a3890,3894
> Dar/MNH
> Dara/M
> Darb/M
> Darbee/M
> Darbie/M
-2471a3894,3897
+2471a3896,3899
> Darcee/M
> Darcey/M
> Darci/M
> Darcie/M
-2472a3899
+2472a3901
> Darda/M
-2474a3902,3904
+2474a3904,3906
> Dareen/M
> Darell/M
> Darelle/M
-2476a3907,3910
+2476a3909,3912
> Dari/M
> Daria/M
> Darice/M
> Darill/M
-2481a3916
+2481a3918
> Darleen/M
-2482a3918
+2482a3920
> Darline/M
-2483a3920,3922
+2483a3922,3924
> Darlleen/M
> Darn/M
> Darnall/M
-2484a3924
+2484a3926
> Daron/M
-2486a3927
+2486a3929
> Darrelle/M
-2487a3929
+2487a3931
> Darrick/M
-2490a3933,3934
+2490a3935,3936
> Darsey/M
> Darsie/M
-2498a3943
+2498a3945
> Darya/M
-2499a3945,3950
+2499a3947,3952
> Daryle/M
> Daryn/M
> Dasha/M
> Dasi/M
> Dasie/M
> Dasya/M
-2500a3952
+2500a3954
> Datha/M
-2502a3955,3956
+2502a3957,3958
> Daune/M
> Dav/MN
-2504a3959,3960
+2504a3961,3962
> Daveen/M
> Daven/M
-2505a3962,3963
+2505a3964,3965
> Daveta/M
> Davey/M
-2506a3965,3967
+2506a3967,3969
> Davida/M
> Davidde/M
> Davide/M
-2507a3969,3972
+2507a3971,3974
> Davie/MS
> Davin/M
> Davina/M
> Davine/M
-2511a3977
+2511a3979
> Dawna/M
-2514a3981,3982
+2514a3983,3984
> Dayle/M
> Dayna/M
-2515a3984,3985
+2515a3986,3987
> Ddene/M
> De/RSMN
-2516a3987
+2516a3989
> DeKalb/M
-2520a3992
+2520a3994
> Deane/M
-2523a3996,3997
+2523a3998,3999
> Deb/SM
> Debbi/M
-2525a4000,4002
+2525a4002,4004
> Debee/M
> Debera/M
> Debi/M
-2526a4004
+2526a4006
> Debor/M
-2540c4018,4019
+2540c4020,4021
< Decker
---
> Deck/MR
> Dede/M
-2541a4021,4022
+2541a4023,4024
> Dedie/M
> Dedra/M
-2542a4024,4026
+2542a4026,4028
> Deeann/M
> Deeanne/M
> Deedee/M
-2543a4028
+2543a4030
> Deerdre/M
-2544a4030
+2544a4032
> Deeyn/M
-2546a4033
+2546a4035
> Dehlia/M
-2548a4036
+2548a4038
> Deina/M
-2552c4040,4041
+2552c4042,4043
< Del
---
> Del/Y
> Dela/M
-2554a4044
+2554a4046
> Delainey/M
-2559a4050,4051
+2559a4052,4053
> Delcina/M
> Delcine/M
-2565a4058
+2565a4060
> Delila/M
-2567a4061
+2567a4063
> Delinda/M
-2570a4065
+2570a4067
> Delly/M
-2574a4070,4072
+2574a4072,4074
> Delmor/M
> Delmore/M
> Delora/M
-2575a4074
+2575a4076
> Deloria/M
-2578a4078,4079
+2578a4080,4081
> Delphine/M
> Delphinia/M
-2584a4086,4089
+2584a4088,4091
> Demetra/M
> Demetre/M
> Demetri/SM
> Demetria/M
-2590a4096
+2590a4098
> Demott/M
-2593a4100
+2593a4102
> Dene
-2597c4104,4105
+2597c4106,4107
< Denis
---
> Deni/SM
> Denice/M
-2600c4108,4113
+2600c4110,4115
< Dennis
---
> Denna/M
@@ -2375,155 +2379,155 @@
> Denni/MS
> Dennie/M
> Dennison/M
-2602a4116,4118
+2602a4118,4120
> Deny/M
> Denys
> Denyse/M
-2603a4120
+2603a4122
> Deonne/M
-2604a4122
+2604a4124
> Der/M
-2607a4126,4128
+2607a4128,4130
> Derk/M
> Dermot/M
> Derrek/M
-2609a4131,4136
+2609a4133,4138
> Derrik/M
> Derril/M
> Derron/M
> Derry
> Derward/M
> Derwin/M
-2611a4139,4140
+2611a4141,4142
> Desi/M
> Desirae/M
-2612a4142
+2612a4144
> Desiri/M
-2613a4144
+2613a4146
> Desmund/M
-2616a4148,4150
+2616a4150,4152
> Dev/M
> Deva/M
> Devan/M
-2620a4155,4159
+2620a4157,4161
> Devina/M
> Devinne/M
> Devland/M
> Devlen/M
> Devlin/M
-2621a4161
+2621a4163
> Devondra/M
-2622a4163,4168
+2622a4165,4170
> Devonna/M
> Devonne/M
> Devora/M
> Devy/M
> Dew/M
> Dewain/M
-2625a4172
+2625a4174
> Dewie/M
-2626a4174
+2626a4176
> Dex/M
-2628a4177
+2628a4179
> Dhabi
-2634a4184
+2634a4186
> Diahann/M
-2635a4186
+2635a4188
> Dian/M
-2636a4188
+2636a4190
> Diandra/M
-2637a4190
+2637a4192
> Dianemarie/M
-2640a4194,4195
+2640a4196,4197
> Diannne/M
> Diarmid/M
-2646a4202
+2646a4204
> Dickie/M
-2648a4205
+2648a4207
> Dicky/M
-2650a4208
+2650a4210
> Didi/M
-2655a4214,4215
+2655a4216,4217
> Diena/M
> Dierdre/M
-2656a4217
+2656a4219
> Dieter/M
-2659a4221
+2659a4223
> Dilan/M
-2660a4223
+2660a4225
> Dill/M
-2661a4225
+2661a4227
> Dillie/M
-2663a4228,4230
+2663a4230,4232
> Dilly/M
> Dimitri/M
> Dimitry/M
-2665a4233,4234
+2665a4235,4236
> Dinnie/M
> Dinny/M
-2669a4239,4241
+2669a4241,4243
> Dione
> Dionis/M
> Dionisio/M
-2683a4256
+2683a4258
> Dita/M
-2697a4271
+2697a4273
> Dniren/M
-2702a4277
+2702a4279
> Dode/M
-2704a4280,4281
+2704a4282,4283
> Dodi/M
> Dodie/M
-2706a4284
+2706a4286
> Dody/M
-2710a4289,4292
+2710a4291,4294
> Dolf/M
> Doll/M
> Dolley/M
> Dolli/M
-2713a4296,4301
+2713a4298,4303
> Dolorita/SM
> Dolph/M
> Dom
> Domenic/M
> Domenico/M
> Domeniga/M
-2714a4303
+2714a4305
> Dominga/M
-2716a4306
+2716a4308
> Domini/M
-2720a4311
+2720a4313
> Dominik/M
-2724a4316
+2724a4318
> Don't
-2726a4319
+2726a4321
> Donal/M
-2728a4322,4323
+2728a4324,4325
> Donall/M
> Donalt/M
-2729a4325,4328
+2729a4327,4330
> Donaugh/M
> Donavon/M
> Donella/M
> Donelle/M
-2730a4330,4333
+2730a4332,4335
> Donetta/M
> Donia/M
> Donica/M
> Donielle/M
-2733a4337
+2733a4339
> Donnamarie/M
-2736a4341
+2736a4343
> Donni/M
-2744a4350,4354
+2744a4352,4356
> Doralia/M
> Doralin/M
> Doralyn/M
> Doralynn/M
> Doralynne/M
-2745a4356
+2745a4358
> Dore/M
-2746a4358,4367
+2746a4360,4369
> Dorelia/M
> Dorella/M
> Dorelle/M
@@ -2534,51 +2538,51 @@
> Dorey/M
> Dori/SM
> Doria/M
-2748a4370,4372
+2748a4372,4374
> Dorice/M
> Dorie/M
> Dorine/M
-2749a4374,4376
+2749a4376,4378
> Dorisa/M
> Dorise/M
> Dorita/M
-2750a4378,4382
+2750a4380,4384
> Doro/M
> Dorolice/M
> Dorolisa/M
> Dorotea/M
> Doroteya/M
-2751a4384
+2751a4386
> Dorothee/M
-2752a4386,4389
+2752a4388,4391
> Dorree/M
> Dorri/SM
> Dorrie/M
> Dorry/M
-2754a4392
+2754a4394
> Dorthea/M
-2756a4395,4396
+2756a4397,4398
> Dory/M
> Dosi/M
-2759a4400
+2759a4402
> Doti/M
-2760a4402,4404
+2760a4404,4406
> Dotti/M
> Dottie/M
> Dotty/M
-2764a4409
+2764a4411
> Dougie/M
-2766a4412
+2766a4414
> Dougy/M
-2767a4414
+2767a4416
> Dov/MR
-2771a4419
+2771a4421
> Doy/M
-2781a4430,4432
+2781a4432,4434
> Dre/M
> Dreddy/M
> Dredi/M
-2786a4438,4444
+2786a4440,4446
> Drona/M
> Dru/M
> Druci/M
@@ -2586,20 +2590,20 @@
> Drucill/M
> Drucy/M
> Drud/M
-2787a4446,4450
+2787a4448,4452
> Drugi/M
> Drusi/M
> Drusie/M
> Drusilla/M
> Drusy/M
-2799a4463
+2799a4465
> Dud/M
-2800a4465,4466
+2800a4467,4468
> Duff/M
> Duffie/M
-2801a4468
+2801a4470
> Dugald/M
-2803a4471,4482
+2803a4473,4484
> Dukey/M
> Dukie/M
> Duky/M
@@ -2612,143 +2616,143 @@
> Dulcine/M
> Dulcinea/M
> Dulcy/M
-2804a4484
+2804a4486
> Dulsea/M
-2809a4490
+2809a4492
> Dun/M
-2811a4493
+2811a4495
> Dunc/M
-2818a4501,4502
+2818a4503,4504
> Dunstan
> Dur/R
-2820a4505
+2820a4507
> Durand/M
-2829a4515
+2829a4517
> Durward/M
-2842a4529
+2842a4531
> Dwain/M
-2845a4533,4538
+2845a4535,4540
> Dyan/M
> Dyana/M
> Dyane/M
> Dyann/M
> Dyanna/M
> Dyanne/M
-2847a4541,4542
+2847a4543,4544
> Dyna/M
> Dynah/M
-2851c4546
+2851c4548
< E/SM
---
> E/SMY
-2853a4549
+2853a4551
> ECMAScript/M
-2879a4576,4580
+2879a4578,4582
> Eachelle/M
> Eada/M
> Eadie/M
> Eadith/M
> Eadmund/M
-2880a4582,4584
+2880a4584,4586
> Eal/M
> Ealasaid/M
> Eamon/M
-2884a4589
+2884a4591
> Earlie/M
-2885a4591
+2885a4593
> Early/M
-2890a4597,4598
+2890a4599,4600
> Eartha/M
> Earvin/M
-2896a4605,4607
+2896a4607,4609
> Eb/MN
> Eba/M
> Ebba/M
-2898a4610,4612
+2898a4612,4614
> Ebeneser/M
> Ebenezer/M
> Eberhard/M
-2899a4614
+2899a4616
> Eberto/M
-2900a4616
+2900a4618
> Ebonee/M
-2904a4621
+2904a4623
> Ecma/M
-2911a4629
+2911a4631
> Eda/M
-2912a4631,4632
+2912a4633,4634
> Edan/M
> Edd/M
-2913a4634
+2913a4636
> Eddi/M
-2916a4638,4640
+2916a4640,4642
> Ede
> Edee/M
> Edeline/M
-2918a4643
+2918a4645
> Edgard/M
-2919a4645,4648
+2919a4647,4650
> Edi/MH
> Edie/M
> Edik/M
> Edin/M
-2921a4651
+2921a4653
> Edita/M
-2922a4653,4657
+2922a4655,4659
> Editha/M
> Edithe/M
> Ediva/M
> Edlin/M
> Edmon/M
-2926a4662
+2926a4664
> Edouard/M
-2927a4664
+2927a4666
> Eduard/M
-2928a4666,4667
+2928a4668,4669
> Eduino/M
> Edvard/M
-2933a4673,4675
+2933a4675,4677
> Edy/M
> Edyth/M
> Edythe/M
-2936a4679
+2936a4681
> Efrem/M
-2937a4681,4682
+2937a4683,4684
> Egan/M
> Egbert
-2938a4684,4685
+2938a4686,4687
> Egon/M
> Egor/M
-2946a4694,4695
+2946a4696,4697
> Eilis/M
> Eimile/M
-2948a4698
+2948a4700
> Eirena/M
-2951a4702,4704
+2951a4704,4706
> Ekaterina/M
> El/Y
> Elaina/M
-2953a4707,4708
+2953a4709,4710
> Elana/M
> Elane/M
-2954a4710
+2954a4712
> Elayne/M
-2958a4715,4717
+2958a4717,4719
> Elberta/M
> Elbertina/M
> Elbertine/M
-2959a4719,4720
+2959a4721,4722
> Elden/M
> Eldin/M
-2960a4722,4723
+2960a4724,4725
> Eldredge/M
> Eldridge/M
-2962a4726,4727
+2962a4728,4729
> Eleanora/M
> Eleanore/M
-2964a4730
+2964a4732
> Eleen/M
-2965a4732,4741
+2965a4734,4743
> Elene/M
> Eleni/M
> Elenore/M
@@ -2759,7 +2763,7 @@
> Elfrida/M
> Elfrieda/M
> Elga/M
-2968c4744,4749
+2968c4746,4751
< Elias
---
> Elia/S
@@ -2768,32 +2772,32 @@
> Elicia/M
> Elie/M
> Elihu/M
-2970a4752
+2970a4754
> Elinore/M
-2972a4755
+2972a4757
> Elisabet/M
-2973a4757
+2973a4759
> Elisabetta/M
-2976a4761,4762
+2976a4763,4764
> Elissa/M
> Elita/M
-2977a4764
+2977a4766
> Elizabet/M
-2979a4767,4768
+2979a4769,4770
> Elka/M
> Elke/M
-2980a4770,4772
+2980a4772,4774
> Elladine/M
> Ellary/M
> Elle/M
-2981a4774,4776
+2981a4776,4778
> Ellene/M
> Ellerey/M
> Ellery/M
-2982a4778,4779
+2982a4780,4781
> Ellette/M
> Elli/SM
-2988a4786,4792
+2988a4788,4794
> Ellissa/M
> Ellswerth/M
> Ellsworth/M
@@ -2801,53 +2805,53 @@
> Elly/M
> Ellyn/M
> Ellynn/M
-2990a4795
+2990a4797
> Elmira/M
-2991a4797,4799
+2991a4799,4801
> Elmore/M
> Elna/MH
> Elnar/M
-2993a4802
+2993a4804
> Elnore/M
-2994a4804
+2994a4806
> Eloisa/M
-2995a4806,4807
+2995a4808,4809
> Elonore/M
> Elora/M
-2998a4811,4815
+2998a4813,4817
> Elsbeth/M
> Else/M
> Elset/M
> Elsey/M
> Elsi/M
-3000a4818,4821
+3000a4820,4823
> Elspeth/M
> Elston/M
> Elsworth/M
> Elsy/M
-3004a4826
+3004a4828
> Elvera/M
-3006a4829
+3006a4831
> Elvina/M
-3008a4832,4834
+3008a4834,4836
> Elvyn/M
> Elwin/M
> Elwira/M
-3010a4837,4839
+3010a4839,4841
> Elwyn/M
> Elyn/M
> Elyse/M
-3011a4841,4842
+3011a4843,4844
> Elysha/M
> Elysia
-3013a4845,4847
+3013a4847,4849
> Elyssa/M
> Em/M
> Ema/M
-3014a4849,4850
+3014a4851,4852
> Emalee/M
> Emalia/M
-3015a4852,4860
+3015a4854,4862
> Emanuele/M
> Emelda/M
> Emelen/M
@@ -2857,81 +2861,81 @@
> Emelita/M
> Emelyne/M
> Emera/M
-3019a4865,4866
+3019a4867,4868
> Emilee/M
> Emili/M
-3020a4868,4869
+3020a4870,4871
> Emilie/M
> Emiline/M
-3024a4874,4877
+3024a4876,4879
> Emlen/M
> Emlyn/M
> Emlynn/M
> Emlynne/M
-3025a4879,4883
+3025a4881,4885
> Emmalee/M
> Emmaline/M
> Emmalyn/M
> Emmalynn/M
> Emmalynne/M
-3026a4885,4888
+3026a4887,4890
> Emmeline/M
> Emmerich/M
> Emmery/M
> Emmet/M
-3027a4890,4894
+3027a4892,4896
> Emmey/M
> Emmi/M
> Emmie/M
> Emmit/M
> Emmott/M
-3028a4896,4897
+3028a4898,4899
> Emmye/M
> Emogene/M
-3029a4899,4900
+3029a4901,4902
> Emyle/M
> Emylee/M
-3032a4904
+3032a4906
> Engelbert/M
-3034a4907
+3034a4909
> Englebert/M
-3039a4913
+3039a4915
> Engracia/M
-3043a4918
+3043a4920
> Ennis
-3045a4921,4922
+3045a4923,4924
> Enrica/M
> Enrichetta/M
-3046a4924
+3046a4926
> Enrika/M
-3047a4926
+3047a4928
> Enriqueta/M
-3050a4930,4931
+3050a4932,4933
> Eolanda/M
> Eolande/M
-3054a4936,4937
+3054a4938,4939
> Ephrayim/M
> Ephrem/M
-3067a4951
+3067a4953
> Eran/M
-3068a4953
+3068a4955
> Erastus/M
-3070a4956
+3070a4958
> Erda/M
-3072a4959,4960
+3072a4961,4962
> Erek/M
> Erena/M
-3074a4963
+3074a4965
> Erhart/M
-3077a4967
+3077a4969
> Ericha/M
-3088a4979,4981
+3088a4981,4983
> Erina/M
> Erinn/M
> Erinna/M
-3091a4985
+3091a4987
> Erl/M
-3093a4988,4994
+3093a4990,4996
> Ermanno/M
> Ermengarde/M
> Ermentrude/M
@@ -2939,107 +2943,107 @@
> Ermina/M
> Erminia/M
> Erminie/M
-3094a4996
+3094a4998
> Ernaline/M
-3095a4998
+3095a5000
> Ernesta/M
-3097a5001
+3097a5003
> Ernestus/M
-3099a5004
+3099a5006
> Erny/M
-3100a5006
+3100a5008
> Errick/M
-3101a5008
+3101a5010
> Erroll/M
-3102a5010,5012
+3102a5012,5014
> Erskine
> Ertha/M
> Erv/M
-3104a5015
+3104a5017
> Eryn/M
-3108a5020
+3108a5022
> Esdras
-3109a5022,5024
+3109a5024,5026
> Esma/M
> Esmaria/M
> Esme/M
-3115a5031,5032
+3115a5033,5034
> Esra/M
> Essa/M
-3120a5038,5039
+3120a5040,5041
> Essy/M
> Esta/M
-3122a5042
+3122a5044
> Estel/M
-3123a5044,5045
+3123a5046,5047
> Estele/M
> Estell/M
-3128a5051
+3128a5053
> Estevan/M
-3132a5056,5058
+3132a5058,5060
> Estrella/M
> Estrellita/M
> Etan/M
-3133a5060
+3133a5062
> Ethe/M
-3134a5062,5066
+3134a5064,5068
> Ethelbert
> Ethelda/M
> Ethelin/M
> Ethelind/M
> Etheline/M
-3135a5068
+3135a5070
> Ethelyn/M
-3138a5072,5073
+3138a5074,5075
> Ethyl/M
> Etienne/M
-3143a5079,5082
+3143a5081,5084
> Etti/M
> Ettie/M
> Ettore/M
> Etty/M
-3148a5088,5090
+3148a5090,5092
> Eudora/M
> Euell/M
> Eugen/M
-3152a5095,5096
+3152a5097,5098
> Eugenius/M
> Eugine/M
-3153a5098
+3153a5100
> Eulalie/M
-3156a5102
+3156a5104
> Euphemia/M
-3166a5113
+3166a5115
> Eustace/M
-3167a5115
+3167a5117
> Eustacia/M
-3168a5117
+3168a5119
> Ev/MN
-3169a5119
+3169a5121
> Evaleen/M
-3170a5121
+3170a5123
> Evangelia/M
-3171a5123
+3171a5125
> Evangelin/M
-3174a5127,5128
+3174a5129,5130
> Evania/M
> Evanne/M
-3176a5131,5134
+3176a5133,5136
> Eveleen/M
> Evelin/M
> Evelina/M
> Eveline/M
-3177a5136
+3177a5138
> Even/M
-3179a5139,5140
+3179a5141,5142
> Everard/M
> Evered/M
-3184a5146
+3184a5148
> Evey/M
-3185a5148,5149
+3185a5150,5151
> Evie/M
> Evin/M
-3186a5151,5160
+3186a5153,5162
> Evonne/M
> Evvie/M
> Evvy/M
@@ -3050,38 +3054,38 @@
> Ewart/M
> Ewell/M
> Ewen/M
-3196a5171,5172
+3196a5173,5174
> Eyde/M
> Eydie/M
-3198a5175
+3198a5177
> Ezechiel/M
-3199a5177,5179
+3199a5179,5181
> Ezequiel/M
> Eziechiele/M
> Ezmeralda/M
-3200a5181
+3200a5183
> Ezri/M
-3224a5206,5207
+3224a5208,5209
> Fabe/RM
> Faber/M
-3226a5210,5213
+3226a5212,5215
> Fabiano/M
> Fabien/M
> Fabio/M
> Fae/M
-3231a5219,5220
+3231a5221,5222
> Faina/M
> Fair/M
-3232a5222,5224
+3232a5224,5226
> Fairfax
> Fairleigh/M
> Fairlie/M
-3236a5229
+3236a5231
> Falito/M
-3237a5231,5232
+3237a5233,5234
> Falkner
> Fallon/M
-3240a5236,5243
+3240a5238,5245
> Fan
> Fanchette/M
> Fanchon/M
@@ -3090,103 +3094,103 @@
> Fanechka/M
> Fania/M
> Fanni/M
-3242a5246,5248
+3242a5248,5250
> Fanya/M
> Far/MY
> Fara/M
-3243a5250,5251
+3243a5252,5253
> Farah/M
> Farand/M
-3244a5253,5256
+3244a5255,5258
> Farica/M
> Farlay/M
> Farlee/M
> Farleigh/M
-3245a5258,5259
+3245a5260,5261
> Farlie/M
> Farly/M
-3246a5261,5262
+3246a5263,5264
> Farr/M
> Farra/M
-3247a5264
+3247a5266
> Farrah/M
-3248a5266,5267
+3248a5268,5269
> Farrand/M
> Farrel/M
-3249a5269
+3249a5271
> Farris/M
-3261a5282,5283
+3261a5284,5285
> Faun/M
> Faunie/M
-3264a5287,5288
+3264a5289,5290
> Faustina/M
> Faustine/M
-3267a5292,5295
+3267a5294,5297
> Fawn/M
> Fawne/M
> Fawnia/M
> Fax/M
-3268a5297
+3268a5299
> Faydra/M
-3269a5299,5303
+3269a5301,5305
> Fayette/M
> Fayina/M
> Fayre/M
> Fayth/M
> Faythe/M
-3276a5311
+3276a5313
> Federica/M
-3277a5313,5314
+3277a5315,5316
> Fedora/M
> Fee/M
-3278a5316,5317
+3278a5318,5319
> Felic/M
> Felicdad/M
-3280a5320
+3280a5322
> Felicio/M
-3281a5322,5325
+3281a5324,5327
> Felicle/M
> Felike/M
> Feliks/M
> Felipa/M
-3282a5327,5328
+3282a5329,5330
> Felisha/M
> Felita/M
-3283a5330,5331
+3283a5332,5333
> Feliza/M
> Felizio/M
-3284a5333
+3284a5335
> Fenelia/M
-3285a5335,5336
+3285a5337,5338
> Feodor/M
> Feodora/M
-3286a5338,5339
+3286a5340,5341
> Ferd/M
> Ferdie/M
-3287a5341,5343
+3287a5343,5345
> Ferdinanda/M
> Ferdinande/M
> Ferdy/M
-3293a5350,5351
+3293a5352,5353
> Fernanda/M
> Fernande/M
-3294a5353
+3294a5355
> Fernandina/M
-3295a5355
+3295a5357
> Ferne/M
-3297a5358
+3297a5360
> Ferrel/M
-3299a5361
+3299a5363
> Fey/M
-3301a5364,5365
+3301a5366,5367
> Fiann/M
> Fianna
-3306a5371,5374
+3306a5373,5376
> Fidela/M
> Fidelia/M
> Fidelio/M
> Fidelity/M
-3308,3309c5376,5379
+3308,3309c5378,5381
< Fielding
< Fields
---
@@ -3194,40 +3198,40 @@
> Field/GS
> Fifi/M
> Fifine/M
-3313a5384,5389
+3313a5386,5391
> Filbert/M
> Filberte/M
> Filberto/M
> Filia/M
> Filide/M
> Filip/M
-3314a5391,5392
+3314a5393,5394
> Filippa/M
> Filippo/M
-3315a5394,5395
+3315a5396,5397
> Filmer/M
> Filmore/M
-3316a5397,5398
+3316a5399,5400
> Fin
> Fina/M
-3317a5400,5401
+3317a5402,5403
> Findlay/M
> Findley/M
-3318a5403
+3318a5405
> Finlay/M
-3325c5410,5412
+3325c5412,5414
< Firefox/M
---
> Fionna/M
> Fionnula/M
> Fiorenze/M
-3330a5418
+3330a5420
> Fitz/M
-3342c5430
+3342c5432
< Fleming
---
> Flem/G
-3344c5432,5437
+3344c5434,5439
< Fletcher
---
> Flemming/M
@@ -3236,70 +3240,70 @@
> Fleurette/M
> Flin/M
> Flinn/M
-3347a5441
+3347a5443
> Flor/M
-3348a5443,5445
+3348a5445,5447
> Florance/M
> Flore/SM
> Florella/M
-3349a5447,5448
+3349a5449,5450
> Florencia/M
> Florentia/M
-3351a5451,5455
+3351a5453,5457
> Florenza/M
> Florette/M
> Flori/SM
> Floria/M
> Florian/M
-3354a5459,5461
+3354a5461,5463
> Florie/M
> Florina/M
> Florinda/M
-3355a5463,5465
+3355a5465,5467
> Florri/M
> Florrie/M
> Florry/M
-3357a5468
+3357a5470
> Flossi/M
-3358a5470
+3358a5472
> Flossy/M
-3360a5473
+3360a5475
> Flss/M
-3369a5483,5486
+3369a5485,5488
> Fons
> Fonsie/M
> Fonz/M
> Fonzie/M
-3378c5495,5496
+3378c5497,5498
< Forrest
---
> Forrest/R
> Forrester/M
-3380a5499
+3380a5501
> Foss/M
-3392c5511
+3392c5513
< Fran/M
---
> Fran/SM
-3393a5513
+3393a5515
> Francene/M
-3394a5515,5516
+3394a5517,5518
> Francesco/M
> Franchot/M
-3399a5522,5523
+3399a5524,5525
> Franciska/M
> Franciskus/M
-3400a5525,5526
+3400a5527,5528
> Francklin/M
> Francklyn/M
-3403a5530
+3403a5532
> Francyne/M
-3412a5540,5543
+3412a5542,5545
> Franklyn/M
> Franky/M
> Franni/M
> Frannie/M
-3414c5545,5549
+3414c5547,5551
< Franz/M
---
> Fransisco/M
@@ -3307,49 +3311,49 @@
> Franz/MN
> Franzen/M
> Frasco/M
-3415a5551,5552
+3415a5553,5554
> Frasier/M
> Frasquito/M
-3417a5555,5556
+3417a5557,5558
> Frayda/M
> Fraze/RM
-3420a5560
+3420a5562
> Freddi/M
-3422a5563,5564
+3422a5565,5566
> Fredek/M
> Fredelia/M
-3423a5566,5567
+3423a5568,5569
> Frederica/M
> Frederich/M
-3424a5569,5570
+3424a5571,5572
> Fredericka/M
> Frederico/M
-3425a5572,5577
+3425a5574,5579
> Frederigo/M
> Frederik/M
> Frederique/M
> Fredi/M
> Fredia/M
> Fredra/M
-3427a5580,5583
+3427a5582,5585
> Fredrika/M
> Free/M
> Freedman/M
> Freeland/M
-3430a5587
+3430a5589
> Freemon/M
-3449a5607
+3449a5609
> Friederike/M
-3450a5609,5610
+3450a5611,5612
> Friedrich
> Friedrick/M
-3481a5642
+3481a5644
> Fulvia/M
-3498c5659
+3498c5661
< GHz
---
> GHz/M
-3513a5675,5682
+3513a5677,5684
> Gabbey/M
> Gabbi/M
> Gabbie/M
@@ -3358,58 +3362,58 @@
> Gabey/M
> Gabi/M
> Gabie/M
-3518a5688,5690
+3518a5690,5692
> Gabriele/M
> Gabriell/M
> Gabriella/M
-3519a5692,5695
+3519a5694,5697
> Gabriellia/M
> Gabriello/M
> Gabrila/M
> Gaby/M
-3522a5699
+3522a5701
> Gae/M
-3524a5702
+3524a5704
> Gaelan/M
-3528a5707
+3528a5709
> Gaile/M
-3531a5711
+3531a5713
> Gal/N
-3544a5725
+3544a5727
> Galina/M
-3546a5728
+3546a5730
> Gallard/M
-3554a5737
+3554a5739
> Galvan/M
-3555a5739
+3555a5741
> Galven/M
-3556a5741
+3556a5743
> Galvin/M
-3557a5743
+3557a5745
> Gamaliel/M
-3562a5749
+3562a5751
> Gan/M
-3567a5755,5757
+3567a5757,5759
> Gannie/M
> Gannon/M
> Ganny/M
-3570a5761,5762
+3570a5763,5764
> Gar/MH
> Garald/M
-3572a5765,5768
+3572a5767,5770
> Gard
> Gardener/M
> Gardie/M
> Gardiner
-3573a5770,5772
+3573a5772,5774
> Gardy/M
> Gare/MH
> Garek/M
-3574a5774
+3574a5776
> Garey/M
-3578a5779
+3578a5781
> Garik/M
-3580a5782,5788
+3580a5784,5790
> Garnet/M
> Garnette/M
> Garold/M
@@ -3417,39 +3421,39 @@
> Garrek/M
> Garret/M
> Garreth/M
-3582a5791
+3582a5793
> Garrik/M
-3583a5793,5794
+3583a5795,5796
> Garrot/M
> Garrott/M
-3585a5797
+3585a5799
> Garv/M
-3586a5799,5802
+3586a5801,5804
> Garvin/M
> Garvy/M
> Garwin/M
> Garwood/M
-3589a5806,5809
+3589a5808,5811
> Gaspar
> Gaspard/M
> Gasparo/M
> Gasper/M
-3590a5811
+3590a5813
> Gaston/M
-3598a5820
+3598a5822
> Gaultiero/M
-3601a5824
+3601a5826
> Gauthier/M
-3602a5826,5828
+3602a5828,5830
> Gav/MN
> Gavan/M
> Gaven/M
-3603a5830,5831
+3603a5832,5833
> Gavra/M
> Gavrielle/M
-3604a5833
+3604a5835
> Gawen/M
-3606c5835,5845
+3606c5837,5847
< Gayle/M
---
> Gaye/M
@@ -3463,16 +3467,16 @@
> Gaylor/M
> Gaylord/M
> Gaynor/M
-3608a5848
+3608a5850
> Gbps
-3611a5852,5853
+3611a5854,5855
> Gearalt/M
> Gearard/M
-3618a5861
+3618a5863
> Gelya/M
-3626a5870
+3626a5872
> Genevra/M
-3627a5872,5878
+3627a5874,5880
> Genia/M
> Genna/M
> Genni/M
@@ -3480,37 +3484,37 @@
> Gennifer/M
> Genny/M
> Geno/M
-3628a5880
+3628a5882
> Genovera/M
-3631a5884
+3631a5886
> Genvieve/M
-3632a5886
+3632a5888
> Geoff/M
-3633a5888,5891
+3633a5890,5893
> Geoffry/M
> Georas/M
> Geordie
> Georg/M
-3634a5893,5896
+3634a5895,5898
> Georgeanna/M
> Georgeanne/M
> Georgena/M
> Georgeta/M
-3635a5898
+3635a5900
> Georgetta/M
-3636a5900
+3636a5902
> Georgi/M
-3638a5903,5906
+3638a5905,5908
> Georgiana/M
> Georgianna/M
> Georgianne/M
> Georgie/M
-3639a5908,5909
+3639a5910,5911
> Georgine/M
> Georgy/M
-3640a5911
+3640a5913
> Geralda/M
-3644a5916,5925
+3644a5918,5927
> Gerda/M
> Gerek/M
> Gerhard/M
@@ -3521,37 +3525,37 @@
> Gerianne/M
> Gerick/M
> Gerik/M
-3645a5927,5929
+3645a5929,5931
> Gerladina/M
> Germain/M
> Germaine/M
-3646a5931
+3646a5933
> Germana/M
-3648a5934,5935
+3648a5936,5937
> Germayne/M
> Gerome/M
-3649a5937,5940
+3649a5939,5942
> Gerrard/M
> Gerri/M
> Gerrie/M
> Gerrilee/M
-3651a5943,5948
+3651a5945,5950
> Gert/M
> Gerta/M
> Gerti/M
> Gertie/M
> Gertrud/M
> Gertruda/M
-3652a5950,5952
+3652a5952,5954
> Gertrudis/M
> Gerty/M
> Gery/M
-3663a5964
+3663a5966
> Gherardo/M
-3664a5966,5967
+3664a5968,5969
> Giacinta/M
> Giacobo/M
-3665a5969,5975
+3665a5971,5977
> Giacomo/M
> Giacopo/M
> Gian/M
@@ -3559,14 +3563,14 @@
> Gianina/M
> Gianna/M
> Gianni/M
-3667a5978,5981
+3667a5980,5983
> Giavani/M
> Gib/M
> Gibb/SM
> Gibbie/M
-3669a5984
+3669a5986
> Gibby/M
-3676c5991,5998
+3676c5993,6000
< Gil/M
---
> Giff/MR
@@ -3577,189 +3581,189 @@
> Giffy/M
> Gigi/M
> Gil/MY
-3678a6001,6004
+3678a6003,6006
> Gilberta/M
> Gilberte/M
> Gilbertina/M
> Gilbertine
-3679a6006
+3679a6008
> Gilburt/M
-3682a6010
+3682a6012
> Gilemette/M
-3685a6014,6015
+3685a6016,6017
> Gillan/M
> Gilles
-3687a6018
+3687a6020
> Gilli/M
-3689a6021
+3689a6023
> Gillie/M
-3690a6023
+3690a6025
> Gilly/M
-3692a6026,6027
+3692a6028,6029
> Ginelle/M
> Ginevra/M
-3694a6030,6032
+3694a6032,6034
> Ginni/M
> Ginnie/M
> Ginnifer/M
-3699a6038,6041
+3699a6040,6043
> Giordano/M
> Giorgi/M
> Giorgia/M
> Giorgio/M
-3701a6044
+3701a6046
> Giovanna/M
-3703a6047,6049
+3703a6049,6051
> Giralda/M
> Giraldo/M
> Giraud
-3704a6051,6054
+3704a6053,6056
> Gisela/M
> Giselbert/M
> Gisele/M
> Gisella/M
-3706a6057,6058
+3706a6059,6060
> Giuditta/M
> Giulia/M
-3707a6060,6061
+3707a6062,6063
> Giulietta/M
> Giulio/M
-3708a6063,6065
+3708a6065,6067
> Giustina/M
> Giustino/M
> Giusto/M
-3709a6067
+3709a6069
> Gizela/M
-3710a6069,6070
+3710a6071,6072
> Glad/M
> Gladi/M
-3719a6080
+3719a6082
> Gleda/M
-3722a6084,6086
+3722a6086,6088
> Glenden/M
> Glendon/M
> Glenine/M
-3725a6090,6092
+3725a6092,6094
> Glennie/M
> Glennis/M
> Glori/M
-3726a6094,6096
+3726a6096,6098
> Gloriana/M
> Gloriane/M
> Glory/M
-3728a6099,6104
+3728a6101,6106
> Glyn/M
> Glynda/M
> Glynis/M
> Glynn/M
> Glynnis/M
> Gnni/M
-3734a6111
+3734a6113
> Godart/M
-3735a6113
+3735a6115
> Goddart/M
-3736a6115,6117
+3736a6117,6119
> Godfree/M
> Godfrey/M
> Godfry/M
-3742a6124
+3742a6126
> Godwin
-3754a6137
+3754a6139
> Goldarina/M
-3756a6140,6141
+3756a6142,6143
> Goldi/M
> Goldia/M
-3758a6144
+3758a6146
> Goldina/M
-3763a6150
+3763a6152
> Goldy/M
-3774a6162
+3774a6164
> Goober/M
-3784a6173,6174
+3784a6175,6176
> Goran/M
> Goraud/M
-3785a6176,6177
+3785a6178,6179
> Gordan/M
> Gorden/M
-3786a6179
+3786a6181
> Gordie/M
-3788a6182
+3788a6184
> Gordy/M
-3799a6194
+3799a6196
> Gothart/M
-3801a6197
+3801a6199
> Gottfried/M
-3811a6208
+3811a6210
> Gracia/M
-3813a6211,6212
+3813a6213,6214
> Gradeigh/M
> Gradey/M
-3814a6214,6215
+3814a6216,6217
> Graehme/M
> Graeme/M
-3818a6220
+3818a6222
> Graig/M
-3819a6222
+3819a6224
> Gram/M
-3821a6225
+3821a6227
> Gran/M
-3822a6227,6229
+3822a6229,6231
> Grange/R
> Grannie/M
> Granny/M
-3823a6231,6234
+3823a6233,6236
> Grantham/M
> Granthem/M
> Grantley/M
> Granville/M
-3824a6236,6238
+3824a6238,6240
> Grata/M
> Gratia/M
> Gratiana/M
-3826a6241,6242
+3826a6243,6244
> Grayce/M
> Grazia/M
-3842a6259,6262
+3842a6261,6264
> Greggory/M
> Gregoire/M
> Gregoor/M
> Gregor/M
-3844a6265
+3844a6267
> Gregorius/M
-3850a6272
+3850a6274
> Grenville
-3852a6275
+3852a6277
> Gretal/M
-3853a6277
+3853a6279
> Grete/M
-3854a6279,6281
+3854a6281,6283
> Grethel/M
> Gretna/M
> Gretta/M
-3857a6285,6287
+3857a6287,6289
> Grier/M
> Griff/M
> Griffie/M
-3859a6290
+3859a6292
> Griffy/M
-3863a6295,6298
+3863a6297,6300
> Griselda
> Grissel/M
> Griswold/M
> Griz/M
-3868a6304
+3868a6306
> Grove/RM
-3881a6318
+3881a6320
> Gualterio/M
-3892a6330,6332
+3892a6332,6334
> Guendolen/M
> Guenevere/M
> Guenna/M
-3897a6338,6340
+3897a6340,6342
> Guglielma/M
> Guglielmo/M
> Gui/M
-3899c6342,6346
+3899c6344,6348
< Guido
---
> Guido/M
@@ -3767,16 +3771,16 @@
> Guillaume/M
> Guillema/M
> Guillemette/M
-3903a6351
+3903a6353
> Guinna/M
-3912a6361,6366
+3912a6363,6368
> Gun/M
> Gunar/M
> Gunilla/M
> Gunner/M
> Guntar/M
> Gunter
-3917a6372,6378
+3917a6374,6380
> Gusella/M
> Guss
> Gussi/M
@@ -3784,20 +3788,20 @@
> Gussy/M
> Gusta/M
> Gustaf/M
-3918a6380
+3918a6382
> Gustave/M
-3920a6383,6385
+3920a6385,6387
> Gusti/M
> Gustie/M
> Gusty/M
-3921a6387
+3921a6389
> Guthrey/M
-3922a6389
+3922a6391
> Guthry/M
-3929a6397,6398
+3929a6399,6400
> Gwendolen/M
> Gwendolin/M
-3931a6401,6408
+3931a6403,6410
> Gweneth/M
> Gwenette/M
> Gwenneth/M
@@ -3806,151 +3810,151 @@
> Gwenny/M
> Gwenora/M
> Gwenore/M
-3932a6410,6411
+3932a6412,6413
> Gwyneth/M
> Gwynne/M
-3954a6434
+3954a6436
> HTTPS
-3959a6440
+3959a6442
> Had/M
-3961a6443,6446
+3961a6445,6448
> Hadlee/M
> Hadleigh/M
> Hadley/M
> Hadria/M
-3963a6449
+3963a6451
> Hagan/M
-3964a6451
+3964a6453
> Hagen
-3970a6458,6460
+3970a6460,6462
> Hailee/M
> Hailey/M
> Haily/M
-3973a6464,6465
+3973a6466,6467
> Hakeem/M
> Hakim/M
-3976c6468
+3976c6470
< Hal/SM
---
> Hal/SMY
-3979a6472,6473
+3979a6474,6475
> Haleigh/M
> Halette/M
-3980a6475,6476
+3980a6477,6478
> Hali/M
> Halie/M
-3981a6478
+3981a6480
> Halimeda/M
-3983a6481
+3983a6483
> Halli/M
-3987d6484
+3987d6486
< Hallowe'en
-3989a6487,6488
+3989a6489,6490
> Hallsy/M
> Hally/M
-3991a6491
+3991a6493
> Halsy/M
-3994a6495
+3994a6497
> Hamel/M
-3995a6497,6498
+3995a6499,6500
> Hamid/M
> Hamil/M
-3999a6503
+3999a6505
> Hamish/M
-4000a6505
+4000a6507
> Hamlen/M
-4002a6508
+4002a6510
> Hammad/M
-4007a6514
+4007a6516
> Hamnet/M
-4011a6519,6520
+4011a6521,6522
> Hana/M
> Hanan/M
-4020c6529,6530
+4020c6531,6532
< Hannah
---
> Hannah/M
> Hanni/SM
-4021a6532,6533
+4021a6534,6535
> Hannie/M
> Hanny/M
-4026a6539
+4026a6541
> Hansiain/M
-4029d6541
+4029d6543
< Hanukah/M
-4031a6544
+4031a6546
> Happy/M
-4032a6546
+4032a6548
> Harald/M
-4033a6548
+4033a6550
> Harbert/M
-4034a6550
+4034a6552
> Harcourt/M
-4039a6556
+4039a6558
> Harland/M
-4040a6558,6559
+4040a6560,6561
> Harlen/M
> Harlene/M
-4042a6562,6564
+4042a6564,6566
> Harli/M
> Harlie/M
> Harlin/M
-4043a6566
+4043a6568
> Harman/M
-4044a6568,6570
+4044a6570,6572
> Harmonia/M
> Harmonie/M
> Harmony/M
-4045a6572,6573
+4045a6574,6575
> Haroun/M
> Harp/MR
-4048a6577,6578
+4048a6579,6580
> Harri/SM
> Harrie/M
-4050a6581,6582
+4050a6583,6584
> Harrietta/M
> Harriette/M
-4052c6584,6585
+4052c6586,6587
< Harris
---
> Harriot/M
> Harriott/M
-4059a6593
+4059a6595
> Hartley
-4061a6596,6597
+4061a6598,6599
> Hartwell/M
> Harv/M
-4063a6600,6601
+4063a6602,6603
> Harwell/M
> Harwilll/M
-4064a6603,6604
+4064a6605,6606
> Hasheem/M
> Hashim/M
-4065a6606,6609
+4065a6608,6611
> Haskel/M
> Haskell/M
> Haslett/M
> Hastie/M
-4066a6611
+4066a6613
> Hasty/M
-4070a6616
+4070a6618
> Hatti/M
-4071a6618
+4071a6620
> Hatty/M
-4077a6625
+4077a6627
> Haven/M
-4088a6637
+4088a6639
> Haydon/M
-4089a6639
+4089a6641
> Hayley/M
-4093a6644,6645
+4093a6646,6647
> Hayyim/M
> Haze/M
-4094a6647
+4094a6649
> Hazlett/M
-4097a6651
+4097a6653
> Heall/M
-4112a6667,6676
+4112a6669,6678
> Heda/M
> Hedda/M
> Heddi/M
@@ -3961,120 +3965,120 @@
> Hedwig/M
> Hedwiga/M
> Hedy/M
-4117a6682
+4117a6684
> Heida/M
-4120a6686
+4120a6688
> Heidie/M
-4122a6689
+4122a6691
> Heindrick/M
-4126a6694,6695
+4126a6696,6697
> Heinrick/M
> Heinrik/M
-4130c6699,6701
+4130c6701,6703
< Hejira
---
> Hejira/MS
> Helaina/M
> Helaine/M
-4133a6705
+4133a6707
> Helenka/M
-4134a6707
+4134a6709
> Helge/M
-4145c6718,6719
+4145c6720,6721
< Hellenize
---
> Hellenize/DSG
> Heller
-4146a6721
+4146a6723
> Helli/M
-4149a6725
+4149a6727
> Helsa/M
-4151a6728
+4151a6730
> Helvetica
-4152a6730
+4152a6732
> Helyn/M
-4156c6734,6736
+4156c6736,6738
< Hendricks
---
> Hendrick/MS
> Hendrik/M
> Hendrika/M
-4157a6738
+4157a6740
> Henka/M
-4160a6742,6743
+4160a6744,6745
> Henrie/M
> Henrieta/M
-4161a6745,6746
+4161a6747,6748
> Henriette/M
> Henrik/M
-4162a6748
+4162a6750
> Henryetta/M
-4166a6753
+4166a6755
> Hephzibah/M
-4171a6759
+4171a6761
> Herb/M
-4173a6762,6764
+4173a6764,6766
> Herbie/M
> Herby/M
> Herc/M
-4174a6766
+4174a6768
> Hercule/MS
-4176a6769
+4176a6771
> Herculie/M
-4181a6775
+4181a6777
> Hermann/M
-4183a6778,6781
+4183a6780,6783
> Hermia/M
> Hermie/M
> Hermina/M
> Hermine/M
-4184a6783
+4184a6785
> Hermione/M
-4186a6786
+4186a6788
> Hermon
-4187a6788
+4187a6790
> Hermy/M
-4188a6790
+4188a6792
> Hernando/M
-4190a6793
+4190a6795
> Herold/M
-4194a6798
+4194a6800
> Hersch/M
-4196a6801
+4196a6803
> Hersh/M
-4198a6804,6805
+4198a6806,6807
> Herta/M
> Hertha/M
-4200a6808,6809
+4200a6810,6811
> Herve/M
> Hervey/M
-4209a6819,6820
+4209a6821,6822
> Hesther/M
> Hestia/M
-4210a6822
+4210a6824
> Hetti/M
-4211a6824,6829
+4211a6826,6831
> Hetty/M
> Hew/M
> Hewe/M
> Hewet/M
> Hewett/M
> Hewie/M
-4219a6838
+4219a6840
> Hi/M
-4233a6853
+4233a6855
> Hilarius/M
-4236a6857,6859
+4236a6859,6861
> Hildagard/M
> Hildagarde/M
> Hilde/M
-4237a6861,6863
+4237a6863,6865
> Hildegaard/M
> Hildegarde/M
> Hildy/M
-4239a6866
+4239a6868
> Hillard/M
-4241a6869,6875
+4241a6871,6877
> Hillery/M
> Hilliard
> Hilliary/M
@@ -4082,155 +4086,155 @@
> Hillier/M
> Hilly/RM
> Hillyer/M
-4246a6881
+4246a6883
> Hinda/M
-4255a6891
+4255a6893
> Hinze/M
-4262a6899
+4262a6901
> Hirsch/M
-4271a6909
+4271a6911
> Hobard/M
-4274a6913,6914
+4274a6915,6916
> Hobey/M
> Hobie/M
-4277a6918
+4277a6920
> Hoebart/M
-4301a6943
+4301a6945
> Holli/SM
-4303d6944
+4303d6946
< Hollis
-4305a6947
+4305a6949
> Hollyanne/M
-4314a6957
+4314a6959
> Homere/M
-4315a6959
+4315a6961
> Homerus/M
-4320a6965
+4320a6967
> Honey/M
-4324c6969,6970
+4324c6971,6972
< Honorable
---
> Honor/B
> Honoria/M
-4338a6985
+4338a6987
> Horatia/M
-4339a6987
+4339a6989
> Horatius/M
-4345a6994,6998
+4345a6996,7000
> Horst/M
> Hort/MN
> Horten/M
> Hortense
> Hortensia/M
-4361a7015,7016
+4361a7017,7018
> Howey/M
> Howie/M
-4363a7019
+4363a7021
> Hoyt/M
-4368a7025
+4368a7027
> Hube/RM
-4370a7028,7030
+4370a7030,7032
> Huberto/M
> Hubey/M
> Hubie/M
-4379a7040,7041
+4379a7042,7043
> Hughie
> Hugibert/M
-4381a7044
+4381a7046
> Hugues/M
-4383a7047
+4383a7049
> Hulda/M
-4384a7049
+4384a7051
> Humbert/M
-4387a7053,7055
+4387a7055,7057
> Humfrey/M
> Humfrid/M
> Humfried/M
-4391a7060
+4391a7062
> Hunfredo/M
-4398a7068
+4398a7070
> Huntlee/M
-4400a7071,7072
+4400a7073,7074
> Hurlee/M
> Hurleigh/M
-4404a7077
+4404a7079
> Husein/M
-4413a7087,7092
+4413a7089,7094
> Hy/M
> Hyacinth/M
> Hyacintha/M
> Hyacinthe/M
> Hyacinthia/M
> Hyacinthie/M
-4414a7094
+4414a7096
> Hyatt/M
-4417a7098
+4417a7100
> Hyman/M
-4418a7100,7101
+4418a7102,7103
> Hymie
> Hynda/M
-4455a7139
+4455a7141
> Iain/M
-4456a7141
+4456a7143
> Ianthe/M
-4458a7144,7145
+4458a7146,7147
> Ibbie/M
> Ibby/M
-4463a7151
+4463a7153
> Ibrahim/M
-4470a7159
+4470a7161
> Ichabod/M
-4474a7164,7169
+4474a7166,7171
> Idalia/M
> Idalina/M
> Idaline/M
> Idell/M
> Idelle/M
> Idette/M
-4475a7171,7173
+4475a7173,7175
> Iggie/M
> Iggy/M
> Ignace/M
-4476a7175
+4476a7177
> Ignacius/M
-4477a7177,7178
+4477a7179,7180
> Ignaz/M
> Ignazio/M
-4483c7184,7185
+4483c7186,7187
< Ikea/M
---
> IKEA/M
> Ikey/M
-4485a7188,7191
+4485a7190,7193
> Ilaire/M
> Ilario/M
> Ileana/M
> Ileane/M
-4487a7194,7195
+4487a7196,7197
> Ilise/M
> Ilka/M
-4488a7197
+4488a7199
> Illa/M
-4491a7201,7205
+4491a7203,7207
> Ilsa/M
> Ilse/M
> Ilysa/M
> Ilyse/M
> Ilyssa/M
-4495a7210
+4495a7212
> Immanuel
-4496a7212
+4496a7214
> Imogen/M
-4497a7214
+4497a7216
> Imojean/M
-4499c7216
+4499c7218
< In/M
---
> In/MP
-4522a7240,7241
+4522a7242,7243
> Inesita/M
> Inessa/M
-4524c7243,7254
+4524c7245,7256
< Inge
---
> Inga/M
@@ -4245,67 +4249,67 @@
> Ingemar/M
> Inger/M
> Inglebert/M
-4525a7256,7258
+4525a7258,7260
> Inglis/M
> Ingmar/M
> Ingra/M
-4528a7262,7267
+4528a7264,7269
> Ingrim/M
> Ingunna/M
> Inigo/M
> Inna/M
> Inness/M
> Innis/M
-4543a7283,7285
+4543a7285,7287
> Iolande/M
> Iolanthe/M
> Iona
-4546a7289,7291
+4546a7291,7293
> Iorgo/MS
> Iormina/M
> Iosep/M
-4560a7306
+4560a7308
> Irena/M
-4561a7308
+4561a7310
> Irina/M
-4567a7315
+4567a7317
> Irita/M
-4573a7322
+4573a7324
> Irv/MG
-4577a7327,7328
+4577a7329,7330
> Irwinn/M
> Isa
-4578a7330
+4578a7332
> Isaak/M
-4579a7332
+4579a7334
> Isabelita/M
-4581a7335,7340
+4581a7337,7342
> Isac/M
> Isacco/M
> Isador/M
> Isadora/M
> Isadore/M
> Isahella/M
-4582a7342
+4582a7344
> Isak/M
-4583a7344
+4583a7346
> Iseabal/M
-4589a7351,7355
+4589a7353,7357
> Isiahi/M
> Isidor/M
> Isidora/M
> Isidore/M
> Isidoro/M
-4598a7365
+4598a7367
> Isobel/M
-4606a7374,7377
+4606a7376,7379
> Issi/M
> Issiah/M
> Issie/M
> Issy/M
-4615a7387
+4615a7389
> Itch/M
-4622c7394,7401
+4622c7396,7403
< Ives
---
> Ivar/M
@@ -4316,69 +4320,69 @@
> Ivie/M
> Ivonne/M
> Ivor/M
-4627a7407,7408
+4627a7409,7410
> Izabel/M
> Izak/M
-4634c7415,7416
+4634c7417,7418
< J/MD
---
> Izzy/M
> J/MDNX
-4639a7422,7427
+4639a7424,7429
> Jabez/M
> Jacenta/M
> Jacinda/M
> Jacinta/M
> Jacintha/M
> Jacinthe/M
-4640a7429,7430
+4640a7431,7432
> Jackelyn/M
> Jacki/M
-4641a7432
+4641a7434
> Jacklin/M
-4642a7434,7435
+4642a7436,7437
> Jackquelin/M
> Jackqueline/M
-4646a7440
+4646a7442
> Jaclin/M
-4652a7447
+4652a7449
> Jacobo/M
-4654a7450
+4654a7452
> Jacquelin/M
-4656a7453,7455
+4656a7455,7457
> Jacquelynn/M
> Jacquenetta/M
> Jacquenette/M
-4657a7457,7460
+4657a7459,7462
> Jacquetta/M
> Jacquette/M
> Jacqui/M
> Jacquie/M
-4658a7462,7465
+4658a7464,7467
> Jacynth/M
> Jada/M
> Jade/M
> Jae/M
-4663a7471
+4663a7473
> Jaimie/M
-4664a7473
+4664a7475
> Jaine/M
-4668a7478,7479
+4668a7480,7481
> Jakie/M
> Jakob/M
-4676a7488
+4676a7490
> Jameson
-4677a7490,7491
+4677a7492,7493
> Jamesy/M
> Jamey/M
-4679a7494,7499
+4679a7496,7501
> Jamil/M
> Jamill/M
> Jamima/M
> Jamison/M
> Jammal/M
> Jammie/M
-4683c7503,7512
+4683c7505,7514
< Jane
---
> Janaya/M
@@ -4391,9 +4395,9 @@
> Janek/M
> Janel/M
> Janela/M
-4684a7514
+4684a7516
> Janella/M
-4686c7516,7521
+4686c7518,7523
< Janet
---
> Janene/M
@@ -4402,26 +4406,26 @@
> Janet/M
> Janeta/M
> Janetta/M
-4687a7523,7525
+4687a7525,7527
> Janeva/M
> Janey/M
> Jania/M
-4689a7528,7529
+4689a7530,7531
> Janifer/M
> Janina
-4692a7533
+4692a7535
> Janith/M
-4693a7535
+4693a7537
> Janka/M
-4694a7537,7538
+4694a7539,7540
> Jannel/M
> Jannelle/M
-4695a7540,7541
+4695a7542,7543
> Janos/M
> Janot/M
-4699a7546
+4699a7548
> Jany/M
-4702a7550,7557
+4702a7552,7559
> Jaquelin/M
> Jaquelyn/M
> Jaquenetta/M
@@ -4430,56 +4434,56 @@
> Jarad/M
> Jard/M
> Jareb/M
-4703a7559,7560
+4703a7561,7562
> Jarib/M
> Jarid/M
-4704a7562
+4704a7564
> Jarrad/M
-4705a7564
+4705a7566
> Jarret/M
-4706a7566
+4706a7568
> Jarrid/M
-4708a7569,7572
+4708a7571,7574
> Jase/M
> Jasen/M
> Jasmin/M
> Jasmina/M
-4711a7576
+4711a7578
> Jasun/M
-4714d7578
+4714d7580
< JavaScript/M
-4721a7586,7589
+4721a7588,7591
> Jaye/M
> Jayme/M
> Jaymee/M
> Jaymie/M
-4722a7591
+4722a7593
> Jaynell/M
-4723a7593,7594
+4723a7595,7596
> Jazmin/M
> Jdavie/M
-4724a7596,7598
+4724a7598,7600
> Jeana/M
> Jeane/M
> Jeanelle/M
-4727a7602
+4727a7604
> Jeanna/M
-4731a7607
+4731a7609
> Jecho/M
-4732a7609,7611
+4732a7611,7613
> Jedd/M
> Jeddy/M
> Jedediah/M
-4733a7613
+4733a7615
> Jedidiah/M
-4740a7621
+4740a7623
> Jeffie/M
-4742a7624,7625
+4742a7626,7627
> Jeffy/M
> Jehanna/M
-4744a7628
+4744a7630
> Jehu
-4745a7630,7642
+4745a7632,7644
> Jelene/M
> Jemie/M
> Jemima/M
@@ -4493,95 +4497,95 @@
> Jeni/M
> Jenica/M
> Jeniece/M
-4746a7644,7646
+4746a7646,7648
> Jeniffer/M
> Jenilee/M
> Jenine/M
-4747a7648
+4747a7650
> Jenn/MRJ
-4749c7650,7653
+4749c7652,7655
< Jenner
---
> Jennee/M
> Jennette/M
> Jenni/M
> Jennica/M
-4751a7656,7657
+4751a7658,7659
> Jennilee/M
> Jennine/M
-4753a7660
+4753a7662
> Jeno/M
-4755a7663
+4755a7665
> Jerad/M
-4756a7665,7669
+4756a7667,7671
> Jeralee/M
> Jeramey/M
> Jeramie/M
> Jere/M
> Jereme/M
-4758a7672,7673
+4758a7674,7675
> Jeremias/M
> Jeremie/M
-4761a7677
+4761a7679
> Jermain/M
-4762a7679
+4762a7681
> Jermayne/M
-4765a7683
+4765a7685
> Jeromy/M
-4766a7685,7688
+4766a7687,7690
> Jerrie/M
> Jerrilee/M
> Jerrilyn/M
> Jerrine/M
-4768a7691
+4768a7693
> Jerrome/M
-4769a7693
+4769a7695
> Jerrylee/M
-4771a7696
+4771a7698
> Jervis/M
-4772a7698,7702
+4772a7700,7704
> Jessa/M
> Jessalin/M
> Jessalyn/M
> Jessamine/M
> Jessamyn/M
-4773a7704,7707
+4773a7706,7709
> Jessee/M
> Jesselyn/M
> Jessey/M
> Jessi/M
-4775a7710,7711
+4775a7712,7713
> Jessika/M
> Jessy/M
-4777a7714,7715
+4777a7716,7717
> Jeth/M
> Jethro
-4781a7720
+4781a7722
> Jewelle/M
-4788a7728,7733
+4788a7730,7735
> Jillana/M
> Jillane/M
> Jillayne/M
> Jilleen/M
> Jillene/M
> Jilli/M
-4789a7735,7736
+4789a7737,7738
> Jillie/M
> Jilly/M
-4798c7745,7746
+4798c7747,7748
< Jo/M
---
> Jo/MY
> Joachim
-4799a7748,7750
+4799a7750,7752
> Joana/M
> Joane/M
> Joanie/M
-4802c7753
+4802c7755
< Joanne/M
---
> Joanne/SM
-4804a7756,7762
+4804a7758,7764
> Jobey/M
> Jobi/M
> Jobie/M
@@ -4589,15 +4593,15 @@
> Joby/M
> Jobye/M
> Jobyna/M
-4805a7764,7765
+4805a7766,7767
> Jocelin/M
> Joceline/M
-4806a7767
+4806a7769
> Jocelyne/M
-4808a7770,7771
+4808a7772,7773
> Jocko/M
> Jodee/M
-4813c7776,7786
+4813c7778,7788
< Joel
---
> Joeann/M
@@ -4611,36 +4615,36 @@
> Joelly/M
> Joellyn/M
> Joelynn/M
-4814a7788
+4814a7790
> Joete/M
-4816a7791
+4816a7793
> Johan/M
-4818a7794
+4818a7796
> Johannah/M
-4821a7798,7799
+4821a7800,7801
> Johna/MH
> Johnath/M
-4823a7802
+4823a7804
> Johnette/M
-4824a7804
+4824a7806
> Johnna/M
-4828a7809,7813
+4828a7811,7815
> Johny/M
> Joice/M
> Jojo/M
> Jolee/M
> Joleen/M
-4829a7815,7817
+4829a7817,7819
> Joletta/M
> Joli/M
> Jolie/M
-4830a7819
+4830a7821
> Joline/M
-4831a7821,7823
+4831a7823,7825
> Joly/M
> Jolyn/M
> Jolynn/M
-4838,4839c7830,7833
+4838,4839c7832,7835
< Jones
< Joni/M
---
@@ -4648,137 +4652,137 @@
> Jonell/M
> Joni/SM
> Jonie/M
-4841a7836
+4841a7838
> Jordain/M
-4842a7838
+4842a7840
> Jordana/M
-4843a7840,7843
+4843a7842,7845
> Jordanna/M
> Jordon/M
> Jorey/M
> Jorgan/M
-4844a7845,7850
+4844a7847,7852
> Jori/M
> Jorie/M
> Jorrie/M
> Jorry/M
> Jory/M
> Joscelin/M
-4845a7852
+4845a7854
> Josee/M
-4848a7856
+4848a7858
> Joseito/M
-4849a7858,7859
+4849a7860,7861
> Josepha/M
> Josephina/M
-4853a7864
+4853a7866
> Josey/M
-4854a7866
+4854a7868
> Joshia/M
-4855a7868,7869
+4855a7870,7871
> Joshuah/M
> Josi/M
-4856a7871
+4856a7873
> Josias/M
-4857a7873
+4857a7875
> Josselyn/M
-4858a7875
+4858a7877
> Josy/M
-4859a7877,7878
+4859a7879,7880
> Jourdain/M
> Jourdan/M
-4862a7882,7884
+4862a7884,7886
> Joya/M
> Joyan/M
> Joyann/M
-4864a7887,7888
+4864a7889,7890
> Joycelin/M
> Joye/M
-4865a7890
+4865a7892
> Jozef/M
-4867a7893
+4867a7895
> Jsandye/M
-4872a7899
+4872a7901
> Jud
-4881a7909,7910
+4881a7911,7912
> Judi/MH
> Judie/M
-4882a7912,7913
+4882a7914,7915
> Juditha/M
> Judon/M
-4884a7916
+4884a7918
> Judye/M
-4885a7918
+4885a7920
> Juieta/M
-4887c7920,7922
+4887c7922,7924
< Jules
---
> Jule/SM
> Julee/M
> Juli/M
-4890a7926,7928
+4890a7928,7930
> Juliane/M
> Juliann/M
> Julianna/M
-4892a7931
+4892a7933
> Julienne/M
-4893a7933,7934
+4893a7935,7936
> Julieta/M
> Julietta/M
-4894a7936,7937
+4894a7938,7939
> Julina/M
> Juline/M
-4895a7939,7940
+4895a7941,7942
> Julissa/M
> Julita/M
-4901a7947
+4901a7949
> Junette/M
-4904a7951,7953
+4904a7953,7955
> Junia/M
> Junie/M
> Junina/M
-4910a7960
+4910a7962
> Justen/M
-4912a7963
+4912a7965
> Justina/M
-4914a7966,7969
+4914a7968,7971
> Justinn/M
> Justino/M
> Justis/M
> Justus/M
-4917c7972,7973
+4917c7974,7975
< K/SMNGJ
---
> Jyoti/M
> K/SMNRGJ
-4929a7986,7989
+4929a7988,7991
> Kacey/M
> Kacie/M
> Kacy/M
> Kaela/M
-4932a7993,7994
+4932a7995,7996
> Kahaleel/M
> Kahlil/M
-4933a7996,7997
+4933a7998,7999
> Kai/M
> Kaia/M
-4934a7999,8003
+4934a8001,8005
> Kaila/M
> Kaile/M
> Kailey/M
> Kain/M
> Kaine/M
-4936a8006,8010
+4936a8008,8012
> Kaitlyn/M
> Kaitlynn/M
> Kaja/M
> Kakalina/M
> Kala/M
-4940a8015,8017
+4940a8017,8019
> Kale/M
> Kaleb/M
> Kaleena/M
-4943a8021,8029
+4943a8023,8031
> Kalie/M
> Kalil/M
> Kalila/M
@@ -4788,38 +4792,38 @@
> Kalle/M
> Kalli/M
> Kally/M
-4944a8031
+4944a8033
> Kalvin/M
-4947a8035,8038
+4947a8037,8040
> Kameko/M
> Kamila/M
> Kamilah/M
> Kamillah/M
-4951a8043
+4951a8045
> Kandace/M
-4953a8046
+4953a8048
> Kandy
-4954a8048
+4954a8050
> Kania/M
-4961a8056
+4961a8058
> Kanya/M
-4967a8063,8064
+4967a8065,8066
> Karalee/M
> Karalynn/M
-4968a8066,8067
+4968a8068,8069
> Kare/M
> Karee/M
-4969a8069
+4969a8071
> Karel/M
-4970a8071
+4970a8073
> Karena/M
-4972a8074,8078
+4972a8076,8080
> Karia/M
> Karie/M
> Karil/M
> Karilynn/M
> Karim/M
-4975c8081,8086
+4975c8083,8088
< Karl/M
---
> Karine/M
@@ -4828,7 +4832,7 @@
> Karissa/M
> Karita/M
> Karl/MNX
-4976a8088,8095
+4976a8090,8097
> Karlan/M
> Karlee/M
> Karleen/M
@@ -4837,7 +4841,7 @@
> Karlie/M
> Karlik/M
> Karlis
-4978c8097,8104
+4978c8099,8106
< Karo/M
---
> Karlotta/M
@@ -4848,7 +4852,7 @@
> Karna/M
> Karney/M
> Karo/MY
-4979a8106,8113
+4979a8108,8115
> Karola/M
> Karole/M
> Karolina/M
@@ -4857,14 +4861,14 @@
> Karon/M
> Karrah/M
> Karrie/M
-4980a8115,8118
+4980a8117,8120
> Karry/M
> Kary/M
> Karyl/M
> Karylin/M
-4984a8123
+4984a8125
> Kaspar/M
-4985a8125,8134
+4985a8127,8136
> Kasper/M
> Kass
> Kassandra/M
@@ -4875,57 +4879,57 @@
> Kat/M
> Kata/M
> Katalin/M
-4986a8136
+4986a8138
> Katee/M
-4987a8138,8143
+4987a8140,8145
> Katerina/M
> Katerine/M
> Katey/M
> Kath/M
> Katha/M
> Katharina/M
-4988a8145,8147
+4988a8147,8149
> Katharyn/M
> Kathe/M
> Katherina/M
-4990a8150
+4990a8152
> Kathi/M
-4993a8154
+4993a8156
> Kathlin/M
-4996a8158
+4996a8160
> Kathryne/M
-4997a8160,8161
+4997a8162,8163
> Kathye/M
> Kati/M
-4999a8164,8167
+4999a8166,8169
> Katine/M
> Katinka/M
> Katleen/M
> Katlin/M
-5003a8172,8177
+5003a8174,8179
> Katrine
> Katrinka/M
> Katti/M
> Kattie/M
> Katuscha/M
> Katusha/M
-5004a8179
+5004a8181
> Katya/M
-5011a8187
+5011a8189
> Kaycee/M
-5013a8190,8195
+5013a8192,8197
> Kayle/M
> Kaylee/M
> Kayley/M
> Kaylil/M
> Kaylyn/M
> Kayne/M
-5019a8202,8205
+5019a8204,8207
> Kean
> Keane/M
> Kearney/M
> Keary/M
-5022a8209,8215
+5022a8211,8217
> Keefe/RM
> Keefer/M
> Keelby/M
@@ -4933,11 +4937,11 @@
> Keelia/M
> Keely/M
> Keen/M
-5023a8217
+5023a8219
> Keene/M
-5025a8220
+5025a8222
> Keir/M
-5027a8223,8232
+5027a8225,8234
> Kelbee/M
> Kelby/M
> Kelcey/M
@@ -4948,51 +4952,51 @@
> Kelila/M
> Kellby/M
> Kellen/M
-5030a8236
+5030a8238
> Kellia/M
-5031a8238
+5031a8240
> Kellina/M
-5032a8240
+5032a8242
> Kellsie/M
-5033a8242
+5033a8244
> Kellyann/M
-5034a8244,8245
+5034a8246,8247
> Kelsi/M
> Kelsy/M
-5036a8248
+5036a8250
> Kelwin/M
-5039a8252
+5039a8254
> Kendal/M
-5040a8254
+5040a8256
> Kendell/M
-5042c8256,8257
+5042c8258,8259
< Kendrick/M
---
> Kendre/M
> Kendrick/MS
-5043a8259,8260
+5043a8261,8262
> Kenn/M
> Kenna/M
-5046a8264,8265
+5046a8266,8267
> Kennett/M
> Kennie/M
-5048a8268
+5048a8270
> Kenon/M
-5059a8280,8281
+5059a8282,8283
> Ker/M
> Kerby/M
-5061a8284,8287
+5061a8286,8289
> Keriann/M
> Kerianne/M
> Kerk/M
> Kermie/M
-5062a8289
+5062a8291
> Kermy/M
-5066a8294,8296
+5066a8296,8298
> Kerrie/M
> Kerrill/M
> Kerrin/M
-5067a8298,8304
+5067a8300,8306
> Kerstin/M
> Kerwin/M
> Kerwinn/M
@@ -5000,46 +5004,46 @@
> Keslie/M
> Kessia/M
> Kessiah/M
-5068a8306,8310
+5068a8308,8312
> Ketti/M
> Kettie/M
> Ketty/M
> Kev/MN
> Kevan/M
-5070a8313
+5070a8315
> Kevina/M
-5071a8315
+5071a8317
> Kevon/M
-5072a8317
+5072a8319
> Kevyn/M
-5079a8325
+5079a8327
> Khalil/M
-5094a8341,8343
+5094a8343,8345
> Ki/M
> Kiah/M
> Kial/M
-5097a8347,8348
+5097a8349,8350
> Kiele/M
> Kienan/M
-5098a8350
+5098a8352
> Kiersten/M
-5101a8354
+5101a8356
> Kikelia/M
-5103a8357,8359
+5103a8359,8361
> Kile/M
> Kiley/M
> Kilian/M
-5104a8361,8363
+5104a8363,8365
> Killian/M
> Killie/M
> Killy/M
-5106a8366,8368
+5106a8368,8370
> Kimball/M
> Kimbell/M
> Kimberlee/M
-5107a8370
+5107a8372
> Kimberli/M
-5108a8372,8379
+5108a8374,8381
> Kimberlyn/M
> Kimble/M
> Kimbra/M
@@ -5048,17 +5052,17 @@
> Kimmy/M
> Kin/M
> Kincaid/M
-5109a8381,8382
+5109a8383,8384
> Kingsley
> Kingsly/M
-5112a8386
+5112a8388
> Kinna/M
-5113a8388,8389
+5113a8390,8391
> Kinnie/M
> Kinny/M
-5115a8392
+5115a8394
> Kinsley/M
-5118a8396,8403
+5118a8398,8405
> Kipp/MR
> Kippar/M
> Kipper/M
@@ -5067,129 +5071,129 @@
> Kira/M
> Kirbee/M
> Kirbie/M
-5124a8410
+5124a8412
> Kiri/M
-5131a8418,8421
+5131a8420,8423
> Kirsteni/M
> Kirsti/M
> Kirstin/M
> Kirstyn/M
-5134a8425,8427
+5134a8427,8429
> Kissee/M
> Kissiah/M
> Kissie/M
-5138a8432,8433
+5138a8434,8435
> Kitti/M
> Kittie/M
-5140a8436,8437
+5140a8438,8439
> Kizzee/M
> Kizzie/M
-5142a8440,8442
+5142a8442,8444
> Klara/M
> Klarika/M
> Klarrisa/M
-5146a8447,8450
+5146a8449,8452
> Klemens/M
> Klement/M
> Kleon/M
> Kliment/M
-5172a8477
+5172a8479
> Koenraad/M
-5183a8489,8493
+5183a8491,8495
> Konstance/M
> Konstantin/M
> Konstantine/M
> Konstanze/M
> Koo/M
-5185a8496,8498
+5185a8498,8500
> Kora/M
> Koral/M
> Koralle/M
-5187a8501,8502
+5187a8503,8504
> Kordula/M
> Kore/M
-5189a8505,8510
+5189a8507,8512
> Korella/M
> Koren/M
> Koressa/M
> Korey/M
> Kori/M
> Korie/M
-5190a8512,8515
+5190a8514,8517
> Korney/M
> Korrie/M
> Korry/M
> Kort/M
-5212a8538
+5212a8540
> Krisha/M
-5213a8540
+5213a8542
> Krishnah/M
-5214a8542,8544
+5214a8544,8546
> Krispin/M
> Krissie/M
> Krissy/M
-5215a8546,8549
+5215a8548,8551
> Kristal/M
> Kristan/M
> Kriste/M
> Kristel/M
-5217c8551,8552
+5217c8553,8554
< Kristi/M
---
> Kristi/MN
> Kristian/M
-5218a8554
+5218a8556
> Kristien/M
-5221a8558,8562
+5221a8560,8564
> Kristo/SM
> Kristofer/M
> Kristoffer/M
> Kristofor/M
> Kristoforo/M
-5223a8565
+5223a8567
> Kristyn/M
-5230a8573
+5230a8575
> Krysta/M
-5231a8575,8577
+5231a8577,8579
> Krystalle/M
> Krystle/M
> Krystyna/M
-5259a8606
+5259a8608
> Kyla/M
-5260a8608,8613
+5260a8610,8615
> Kylen/M
> Kylie/M
> Kylila/M
> Kylynn/M
> Kym/M
> Kynthia/M
-5262a8616
+5262a8618
> Kyrstin/M
-5277c8631
+5277c8633
< LG
---
> LG/M
-5295a8650
+5295a8652
> Lacee/M
-5297a8653
+5297a8655
> Lacie/M
-5302a8659
+5302a8661
> Laetitia/M
-5308a8666,8668
+5308a8668,8670
> Laina/M
> Lainey/M
> Laird/M
-5315a8676
+5315a8678
> Lalo/M
-5324a8686,8687
+5324a8688,8689
> Lammond/M
> Lamond/M
-5326a8690
+5326a8692
> Lanae/M
-5337a8702,8703
+5337a8704,8705
> Lanette/M
> Laney/M
-5342a8709,8716
+5342a8711,8718
> Langsdon/M
> Langston/M
> Lani/M
@@ -5198,190 +5202,190 @@
> Lanna/M
> Lanni/M
> Lannie/M
-5352a8727
+5352a8729
> Laraine/M
-5355a8731,8736
+5355a8733,8738
> Lari/M
> Larina/M
> Larine/M
> Larisa/M
> Larissa/M
> Lark/M
-5360a8742
+5360a8744
> Laryssa/M
-5366a8749
+5366a8751
> Latashia/M
-5367a8751
+5367a8753
> Latia/M
-5373a8758,8759
+5373a8760,8761
> Latrena/M
> Latrina/M
-5378a8765,8766
+5378a8767,8768
> Laughton
> Launce/M
-5380a8769,8771
+5380a8771,8773
> Lauraine/M
> Laural/M
> Lauralee/M
-5381a8773,8775
+5381a8775,8777
> Laure/M
> Lauree/M
> Laureen/M
-5383c8777,8779
+5383c8779,8781
< Lauren/M
---
> Laurella/M
> Lauren/SM
> Laurena/M
-5384a8781
+5384a8783
> Laurene/M
-5385a8783,8784
+5385a8785,8786
> Lauretta/M
> Laurette/M
-5386a8786,8787
+5386a8788,8789
> Laurianne/M
> Laurice/M
-5387a8789,8790
+5387a8791,8792
> Lauritz/M
> Lauryn/M
-5388a8792
+5388a8794
> Lavena/M
-5389a8794
+5389a8796
> Laverna/M
-5390a8796,8798
+5390a8798,8800
> Lavina/M
> Lavinia/M
> Lavinie/M
-5392a8801
+5392a8803
> Law
-5394a8804
+5394a8806
> Lawry/M
-5395a8806,8807
+5395a8808,8809
> Lawton/M
> Lay/M
-5397a8810,8814
+5397a8812,8816
> Layne/M
> Layney/M
> Layton/M
> Lazar/M
> Lazare/M
-5400c8817
+5400c8819
< Le/SM
---
> Le/SMN
-5407a8825
+5407a8827
> Leandra/M
-5410a8829,8830
+5410a8831,8832
> Leanor/M
> Leanora/M
-5416a8837
+5416a8839
> Lebbie/M
-5421a8843,8844
+5421a8845,8846
> Leeann/M
> Leeanne/M
-5422a8846,8851
+5422a8848,8853
> Leela/M
> Leelah/M
> Leeland/M
> Leena/M
> Leesa/M
> Leese/M
-5425a8855
+5425a8857
> Lefty/M
-5429a8860
+5429a8862
> Legra/M
-5431a8863
+5431a8865
> Leia/M
-5436a8869,8870
+5436a8871,8872
> Leigha/M
> Leighton/M
-5437a8872
+5437a8874
> Leilah/M
-5438a8874,8875
+5438a8876,8877
> Leisha/M
> Lek/M
-5439a8877
+5439a8879
> Lelah/M
-5441a8880
+5441a8882
> Lem/M
-5442a8882,8884
+5442a8884,8886
> Lemar/M
> Lemmie/M
> Lemmy/M
-5447a8890,8892
+5447a8892,8894
> Lenci/M
> Lenee/M
> Lenette/M
-5451a8897,8900
+5451a8899,8902
> Lenka/M
> Lenna/M
> Lennard/M
> Lennie/M
-5459a8909,8910
+5459a8911,8912
> Leodora/M
> Leoine/M
-5460a8912
+5460a8914
> Leoline/M
-5462a8915
+5462a8917
> Leonanie/M
-5465a8919
+5465a8921
> Leone/M
-5466a8921,8923
+5466a8923,8925
> Leonelle/M
> Leonerd/M
> Leonhard/M
-5468a8926
+5468a8928
> Leonie/M
-5469a8928,8931
+5469a8930,8933
> Leonora/M
> Leonore/M
> Leontine/M
> Leontyne/M
-5471a8934
+5471a8936
> Leora/M
-5475a8939
+5475a8941
> Leroi/M
-5477a8942
+5477a8944
> Leshia/M
-5478a8944
+5478a8946
> Lesli/M
-5479a8946
+5479a8948
> Lesly/M
-5484a8952
+5484a8954
> Lesya/M
-5487a8956
+5487a8958
> Lethia/M
-5488a8958
+5488a8960
> Letisha/M
-5489a8960,8961
+5489a8962,8963
> Letizia/M
> Letta/M
-5490a8963,8967
+5490a8965,8969
> Letti/M
> Lettie/M
> Letty/M
> Leupold/M
> Lev
-5492a8970
+5492a8972
> Levey/M
-5494a8973
+5494a8975
> Levin/M
-5497a8977
+5497a8979
> Levon/M
-5499a8980,8981
+5499a8982,8983
> Lewes
> Lewie/M
-5501a8984,8987
+5501a8986,8989
> Lewiss
> Lexi/SM
> Lexie/M
> Lexine/M
-5503a8990,8993
+5503a8992,8995
> Lexy/M
> Leyla/M
> Lezley/M
> Lezlie/M
-5506a8997,9007
+5506a8999,9009
> Lia/M
> Liam/M
> Lian/M
@@ -5393,15 +5397,15 @@
> Libbey/M
> Libbi/M
> Libbie/M
-5515a9017
+5515a9019
> Licha/M
-5516a9019
+5516a9021
> Lida/M
-5522a9026
+5522a9028
> Lief/M
-5523a9028
+5523a9030
> Liesa/M
-5525,5526c9030,9033
+5525,5526c9032,9035
< Lila/M
< Lilia/M
---
@@ -5409,47 +5413,47 @@
> Lila/SM
> Lilah/M
> Lilia/MS
-5528a9036
+5528a9038
> Liliane/M
-5530a9039
+5530a9041
> Lilla/M
-5531a9041
+5531a9043
> Lilli/MS
-5535a9046
+5535a9048
> Lilllie/M
-5538a9050
+5538a9052
> Lilyan/M
-5547a9060
+5547a9062
> Linc/M
-5551a9065,9067
+5551a9067,9069
> Lindi/M
> Lindie/M
> Lindon/M
-5553a9070
+5553a9072
> Lindsy/M
-5554a9072,9077
+5554a9074,9079
> Linea/M
> Linell/M
> Linet/M
> Linette/M
> Link/M
> Linn/M
-5555a9079,9083
+5555a9081,9085
> Linnea/M
> Linnell/M
> Linnet/M
> Linnie/M
> Linoel/M
-5560a9089
+5560a9091
> Linzy/M
-5561a9091
+5561a9093
> Lionello/M
-5566a9097
+5566a9099
> Lira/M
-5567a9099,9100
+5567a9101,9102
> Lisabeth/M
> Lisbeth/M
-5568a9102,9108
+5568a9104,9110
> Lise/M
> Lisetta/M
> Lisette/M
@@ -5457,172 +5461,172 @@
> Lishe/M
> Lisle/M
> Lissa/M
-5569a9110,9112
+5569a9112,9114
> Lissi/M
> Lissie/M
> Lissy/M
-5573a9117
+5573a9119
> Lita/M
-5577a9122,9124
+5577a9124,9126
> Liuka/M
> Liv/M
> Liva/M
-5583a9131,9133
+5583a9133,9135
> Livvie/M
> Livvy/M
> Livvyy/M
-5586a9137,9139
+5586a9139,9141
> Lizabeth/M
> Lizbeth/M
> Lizette/M
-5591a9145
+5591a9147
> Llywellyn/M
-5595a9150
+5595a9152
> Lock/M
-5600a9156
+5600a9158
> Lodovico/M
-5601a9158
+5601a9160
> Loella/M
-5608a9166
+5608a9168
> Loise/M
-5610a9169
+5610a9171
> Loleta/M
-5613a9173
+5613a9175
> Lolly/M
-5618a9179
+5618a9181
> Lona/M
-5620a9182
+5620a9184
> Lonee/M
-5624a9187,9190
+5624a9189,9192
> Loni/M
> Lonna/M
> Lonnard/M
> Lonni/M
-5625a9192
+5625a9194
> Lonny/M
-5627a9195
+5627a9197
> Lorain/M
-5628a9197,9200
+5628a9199,9202
> Loralee/M
> Loralie/M
> Loralyn/M
> Lorant/M
-5630a9203,9204
+5630a9205,9206
> Loree/M
> Loreen/M
-5632c9206,9207
+5632c9208,9209
< Loren
---
> Lorelle/M
> Loren/S
-5636a9212
+5636a9214
> Lorenza/M
-5638a9215
+5638a9217
> Lorette/M
-5639a9217,9219
+5639a9219,9221
> Loria/M
> Lorianna/M
> Lorianne/M
-5640a9221,9226
+5640a9223,9228
> Lorilee/M
> Lorilyn/M
> Lorin/M
> Lorinda/M
> Lorine/M
> Lorita/M
-5641a9228
+5641a9230
> Lorne/M
-5642a9230
+5642a9232
> Lorrayne/M
-5643a9232
+5643a9234
> Lorri/M
-5644a9234,9236
+5644a9236,9238
> Lorrin/M
> Lorry/M
> Lory/M
-5645a9238
+5645a9240
> Lothaire/M
-5647a9241,9243
+5647a9243,9245
> Lotta/M
> Lotte/M
> Lotti/M
-5648a9245
+5648a9247
> Lotty/M
-5654a9252
+5654a9254
> Louisette/M
-5659a9258
+5659a9260
> Loutitia/M
-5663a9263
+5663a9265
> Lovell
-5668a9269,9270
+5668a9271,9272
> Lowrance/M
> Loy/M
-5670a9273
+5670a9275
> Loydie/M
-5681c9284,9285
+5681c9286,9287
< Lucas
---
> Luca/SM
> Lucais/M
-5683c9287,9289
+5683c9289,9291
< Lucia/M
---
> Lucho/M
> Luci/MN
> Lucia/MS
-5684a9291
+5684a9293
> Luciana/M
-5685a9293
+5685a9295
> Lucie/M
-5686a9295
+5686a9297
> Lucienne/M
-5687a9297
+5687a9299
> Lucila/M
-5688a9299
+5688a9301
> Lucilia/M
-5689a9301
+5689a9303
> Lucina
-5690a9303
+5690a9305
> Lucine/M
-5691a9305
+5691a9307
> Lucita/M
-5694a9309
+5694a9311
> Lucky/M
-5699a9315,9317
+5699a9317,9319
> Ludovico/M
> Ludovika/M
> Ludvig/M
-5701a9320
+5701a9322
> Luelle/M
-5708a9328,9329
+5708a9330,9331
> Luise/M
> Lukas/M
-5710a9332
+5710a9334
> Lulita/M
-5717a9340,9341
+5717a9342,9343
> Lura/M
> Lurette/M
-5718a9343,9346
+5718a9345,9348
> Lurleen/M
> Lurlene/M
> Lurline/M
> Lusa/M
-5720a9349
+5720a9351
> Lutero/M
-5731a9361
+5731a9363
> Ly/MY
-5735a9366
+5735a9368
> Lyda/M
-5737a9369,9370
+5737a9371,9372
> Lydie/M
> Lydon/M
-5742a9376
+5742a9378
> Lyn/M
-5744a9379,9381
+5744a9381,9383
> Lynde/M
> Lyndel/M
> Lyndell/M
-5745a9383,9389
+5745a9385,9391
> Lyndsay/M
> Lyndsey/M
> Lyndsie/M
@@ -5630,158 +5634,158 @@
> Lynea/M
> Lynelle/M
> Lynett/M
-5747a9392
+5747a9394
> Lynna/M
-5748a9394,9398
+5748a9396,9400
> Lynnea/M
> Lynnell/M
> Lynnelle/M
> Lynnet/M
> Lynnett/M
-5749a9400
+5749a9402
> Lynsey/M
-5754a9406
+5754a9408
> Lyssa/M
-5768c9420
+5768c9422
< MHz
---
> MHz/M
-5789a9442
+5789a9444
> Mab
-5790a9444
+5790a9446
> Mabelle/M
-5818a9473
+5818a9475
> Mada/M
-5820a9476,9478
+5820a9478,9480
> Madalena/M
> Madalyn/M
> Maddalena/M
-5821a9480,9481
+5821a9482,9483
> Maddi/M
> Maddie/M
-5822a9483
+5822a9485
> Maddy/M
-5823a9485,9486
+5823a9487,9488
> Madel/M
> Madelaine/M
-5824a9488,9491
+5824a9490,9493
> Madelena/M
> Madelene/M
> Madelin/M
> Madelina/M
-5825a9493,9495
+5825a9495,9497
> Madella/M
> Madelle/M
> Madelon/M
-5828a9499,9500
+5828a9501,9502
> Madlen/M
> Madlin/M
-5832a9505
+5832a9507
> Mady/M
-5833a9507
+5833a9509
> Maegan/M
-5836a9511,9514
+5836a9513,9516
> Mag/M
> Magda/M
> Magdaia/M
> Magdalen
-5840a9519,9520
+5840a9521,9522
> Maggee/M
> Maggi/M
-5841a9522
+5841a9524
> Maggy/M
-5845a9527
+5845a9529
> Magnum
-5852a9535,9536
+5852a9537,9538
> Mahala/M
> Mahalia/M
-5860a9545,9546
+5860a9547,9548
> Mahmoud/M
> Mahmud/M
-5862a9549,9550
+5862a9551,9552
> Maia/M
> Maible/M
-5863a9552,9553
+5863a9554,9555
> Maiga/M
> Maighdiln/M
-5870a9561,9563
+5870a9563,9565
> Mair/M
> Maire/M
> Maisey/M
-5871a9565,9566
+5871a9567,9568
> Maison/M
> Maitilde/M
-5873a9569
+5873a9571
> Maje/M
-5879a9576,9577
+5879a9578,9579
> Mal
> Mala/M
-5885a9584
+5885a9586
> Malanie/M
-5894a9594
+5894a9596
> Malchy/M
-5900a9601
+5900a9603
> Malena/M
-5901a9603
+5901a9605
> Malia/M
-5903a9606
+5903a9608
> Malina/M
-5904a9608
+5904a9610
> Malinde/M
-5905a9610,9611
+5905a9612,9613
> Malissa/M
> Malissia/M
-5906a9613
+5906a9615
> Mallissa/M
-5907a9615
+5907a9617
> Mallorie/M
-5909a9618
+5909a9620
> Malorie/M
-5916a9626,9630
+5916a9628,9632
> Malva/M
> Malvin/M
> Malvina/M
> Malynda/M
> Mame/M
-5932a9647
+5932a9649
> Manda/M
-5934a9650
+5934a9652
> Mandel/M
-5936a9653,9654
+5936a9655,9656
> Mandi/M
> Mandie/M
-5938a9657
+5938a9659
> Mandriva/M
-5950a9670,9674
+5950a9672,9676
> Mannie/M
> Manny/M
> Mano/M
> Manolo/M
> Manon/M
-5957a9682
+5957a9684
> Manya/M
-5964c9689
+5964c9691
< Mar/SM
---
> Mar/SMN
-5965a9691
+5965a9693
> Marabel/M
-5973a9700,9701
+5973a9702,9703
> Marcela/M
> Marcelia/M
-5975a9704,9708
+5975a9706,9710
> Marcelle/M
> Marcellina/M
> Marcelline/M
> Marcello/M
> Marcellus
-5977a9711,9712
+5977a9713,9714
> Marchall/M
> Marchelle/M
-5981a9717,9718
+5981a9719,9720
> Marcile/M
> Marcille/M
-5987a9725,9731
+5987a9727,9733
> Mareah/M
> Maren/M
> Marena/M
@@ -5789,46 +5793,46 @@
> Marga/M
> Margalit/M
> Margalo/M
-5988a9733,9738
+5988a9735,9740
> Margareta/M
> Margarete/M
> Margaretha/M
> Margarethe/M
> Margaretta/M
> Margarette/M
-5990a9741
+5990a9743
> Margaux
-5991a9743
+5991a9745
> Margeaux/M
-5992a9745,9747
+5992a9747,9749
> Marget/M
> Margette/M
> Margi/M
-5993a9749
+5993a9751
> Margit/M
-5994a9751
+5994a9753
> Margot/M
-5997a9755
+5997a9757
> Margy/M
-5999a9758
+5999a9760
> Mariam/M
-6001a9761,9762
+6001a9763,9764
> Mariann/M
> Marianna/M
-6004a9766,9768
+6004a9768,9770
> Maribelle/M
> Maribeth/M
> Marice/M
-6005a9770
+6005a9772
> Maridel/M
-6006a9772,9777
+6006a9774,9779
> Marieann/M
> Mariejeanne/M
> Mariel/M
> Mariele/M
> Marielle/M
> Mariellen/M
-6007a9779,9786
+6007a9781,9788
> Mariette/M
> Marigold/M
> Marijn/M
@@ -5837,225 +5841,225 @@
> Marilee/M
> Marilin/M
> Marillin/M
-6011a9791
+6011a9793
> Marinna/M
-6013a9794
+6013a9796
> Mariquilla/M
-6014a9796
+6014a9798
> Mariska/M
-6016a9799
+6016a9801
> Marita/M
-6017a9801
+6017a9803
> Maritsa
-6020a9805,9810
+6020a9807,9812
> Mariya/M
> Marj/M
> Marja/M
> Marje/M
> Marji/M
> Marjie/M
-6022a9813
+6022a9815
> Marjy/M
-6024a9816
+6024a9818
> Marketa/M
-6025a9818
+6025a9820
> Markos
-6026a9820
+6026a9822
> Markus/M
-6027a9822
+6027a9824
> Marlane/M
-6029a9825,9828
+6029a9827,9830
> Marleah/M
> Marlee/M
> Marleen/M
> Marlena/M
-6031a9831
+6031a9833
> Marlie/M
-6032a9833,9834
+6032a9835,9836
> Marline/M
> Marlo/M
-6033a9836
+6033a9838
> Marlow/M
-6034a9838,9839
+6034a9840,9841
> Marlyn/M
> Marmaduke/M
-6035a9841
+6035a9843
> Marna/M
-6036a9843,9846
+6036a9845,9848
> Marney/M
> Marni/M
> Marnia/M
> Marnie/M
-6044a9855
+6044a9857
> Marrilee/M
-6045a9857,9858
+6045a9859,9860
> Marris/M
> Marrissa/M
-6051a9865
+6051a9867
> Marshal/M
-6052a9867,9868
+6052a9869,9870
> Marsiella/M
> Mart/MN
-6053a9870
+6053a9872
> Martainn/M
-6054a9872,9874
+6054a9874,9876
> Martelle/M
> Marten/M
> Martguerita/M
-6055a9876,9878
+6055a9878,9880
> Marthe/M
> Marthena/M
> Marti/M
-6057a9881,9882
+6057a9883,9884
> Martica/M
> Martie/M
-6061a9887,9888
+6061a9889,9890
> Martino/M
> Martita/M
-6062a9890,9892
+6062a9892,9894
> Martyn/M
> Martynne/M
> Marv/MN
-6063a9894
+6063a9896
> Marve/M
-6064a9896
+6064a9898
> Marven/M
-6065a9898
+6065a9900
> Marwin/M
-6070a9904
+6070a9906
> Marya/M
-6071a9906
+6071a9908
> Maryanna/M
-6072a9908,9909
+6072a9910,9911
> Marybelle/M
> Marybeth/M
-6073a9911,9913
+6073a9913,9915
> Maryjane/M
> Maryjo/M
> Maryl/M
-6074a9915,9917
+6074a9917,9919
> Marylee/M
> Marylin/M
> Marylinda/M
-6075a9919,9922
+6075a9921,9924
> Marylynne/M
> Maryrose/M
> Marys
> Marysa/M
-6082a9930
+6082a9932
> Masha/M
-6091a9940,9941
+6091a9942,9943
> Massimiliano/M
> Massimo/M
-6094c9944,9947
+6094c9946,9949
< Mather
---
> Mata/M
> Matelda/M
> Mateo/M
> Mathe/MR
-6096a9950
+6096a9952
> Mathian/M
-6097a9952,9953
+6097a9954,9955
> Mathilda/M
> Mathilde/M
-6098a9955
+6098a9957
> Matias/M
-6099a9957
+6099a9959
> Matilde/M
-6102a9961
+6102a9963
> Matteo/M
-6103a9963,9964
+6103a9965,9966
> Matthaeus/M
> Mattheus/M
-6105a9967,9971
+6105a9969,9973
> Matthieu/M
> Matthiew/M
> Matthus/M
> Matti/M
> Mattias/M
-6106a9973
+6106a9975
> Matty/M
-6108a9976
+6108a9978
> Maudie/M
-6112a9981
+6112a9983
> Maure/M
-6113a9983,9984
+6113a9985,9986
> Maureene/M
> Maurene/M
-6116a9988
+6116a9990
> Maurie/M
-6117a9990,9991
+6117a9992,9993
> Maurise/M
> Maurita/M
-6121a9996,9998
+6121a9998,10000
> Maurits/M
> Maurizia/M
> Maurizio/M
-6123a10001
+6123a10003
> Maury
-6126a10005
+6126a10007
> Mavra/M
-6127a10007,10009
+6127a10009,10011
> Maxi/M
> Maxie/M
> Maxim
-6128a10011,10013
+6128a10013,10015
> Maximilianus/M
> Maximilien/M
> Maximo/M
-6130a10016
+6130a10018
> Maxy/M
-6133a10020,10021
+6133a10022,10023
> Maybelle/M
> Maye/M
-6136a10025,10026
+6136a10027,10028
> Mayne/M
> Maynord/M
-6137a10028
+6137a10030
> Mayor/M
-6203a10095
+6203a10097
> Meaghan/M
-6204a10097
+6204a10099
> Meara/M
-6205a10099
+6205a10101
> Mechelle/M
-6216c10110
+6216c10112
< Meg/M
---
> Meg/MN
-6217a10112,10115
+6217a10114,10117
> Megen/M
> Meggi/M
> Meggie/M
> Meggy/M
-6218a10117,10119
+6218a10119,10121
> Meghann/M
> Mehetabel/M
> Mei/MR
-6225c10126,10128
+6225c10128,10130
< Mel/M
---
> Mel/MY
> Mela/M
> Melamie/M
-6227a10131
+6227a10133
> Melania/M
-6228a10133,10134
+6228a10135,10136
> Melantha/M
> Melany/M
-6233a10140,10143
+6233a10142,10145
> Melesa/M
> Melessa/M
> Melicent/M
> Melina/M
-6234a10145
+6234a10147
> Melinde/M
-6236a10148,10150
+6236a10150,10152
> Melisandra/M
> Melisenda/M
> Melisent/M
-6237a10152,10160
+6237a10154,10162
> Melisse/M
> Melita/M
> Melitta/M
@@ -6065,31 +6069,31 @@
> Mellie/M
> Mellisa/M
> Mellisent/M
-6238a10162,10165
+6238a10164,10167
> Melloney/M
> Melly/M
> Melodee/M
> Melodie/M
-6239a10167,10169
+6239a10169,10171
> Melonie/M
> Melony/M
> Melosa/M
-6244a10175
+6244a10177
> Melvyn/M
-6247a10179
+6247a10181
> Menard/M
-6254a10187
+6254a10189
> Mendie/M
-6256a10190
+6256a10192
> Mendy/M
-6277a10212
+6277a10214
> Merci/M
-6278a10214
+6278a10216
> Mercie/M
-6281a10218,10219
+6281a10220,10221
> Mercy/M
> Meredeth/M
-6282a10221,10228
+6282a10223,10230
> Meredithe/M
> Merell/M
> Meridel/M
@@ -6098,360 +6102,360 @@
> Merilee/M
> Merill/M
> Merilyn/M
-6283a10230,10233
+6283a10232,10235
> Meris
> Merissa/M
> Merl/M
> Merla/M
-6285a10236,10237
+6285a10238,10239
> Merlina/M
> Merline/M
-6286a10239,10240
+6286a10241,10242
> Merna/M
> Merola/M
-6287a10242,10243
+6287a10244,10245
> Merralee/M
> Merrel/M
-6289a10246,10251
+6289a10248,10253
> Merridie/M
> Merrie/M
> Merrielle/M
> Merrile/M
> Merrilee/M
> Merrili/M
-6290a10253
+6290a10255
> Merrily/M
-6292a10256,10257
+6292a10258,10259
> Merry/M
> Mersey
-6294a10260
+6294a10262
> Merv/M
-6295a10262,10264
+6295a10264,10266
> Merwin/M
> Merwyn/M
> Meryl/M
-6329a10299,10300
+6329a10301,10302
> Mic
> Micaela/M
-6333a10305,10308
+6333a10307,10310
> Michaela/M
> Michaelina/M
> Michaeline/M
> Michaella/M
-6334a10310,10312
+6334a10312,10314
> Michail/M
> Michal/M
> Michale/M
-6335a10314
+6335a10316
> Micheil/M
-6339a10319,10321
+6339a10321,10323
> Michelina/M
> Micheline/M
> Michell/M
-6347a10330
+6347a10332
> Micki/M
-6357a10341
+6357a10343
> Midge/M
-6361a10346,10347
+6361a10348,10349
> Mignon/M
> Mignonne/M
-6362a10349,10352
+6362a10351,10354
> Miguela/M
> Miguelita/M
> Mikael/M
> Mikaela/M
-6363a10354,10355
+6363a10356,10357
> Mikel/M
> Mikey/M
-6364a10357,10358
+6364a10359,10360
> Mikkel/M
> Mikol/M
-6365a10360
+6365a10362
> Mil/MY
-6370c10365,10367
+6370c10367,10369
< Miles
---
> Mildrid/M
> Mile/SM
> Milena/M
-6371a10369,10371
+6371a10371,10373
> Milicent/M
> Milissent/M
> Milka/M
-6376a10377
+6376a10379
> Milli/M
-6379a10381,10382
+6379a10383,10384
> Millisent/M
> Milly/M
-6383a10387
+6383a10389
> Milt/M
-6384a10389
+6384a10391
> Miltie/M
-6387a10393
+6387a10395
> Milty/M
-6388a10395
+6388a10397
> Milzie/M
-6391c10398,10399
+6391c10400,10401
< Min/M
---
> Min/MR
> Mina/M
-6392a10401
+6392a10403
> Minda/M
-6395a10405
+6395a10407
> Miner/M
-6396a10407,10408
+6396a10409,10410
> Minetta/M
> Minette/M
-6398a10411,10413
+6398a10413,10415
> Minna
> Minnaminnie/M
> Minne/M
-6402a10418
+6402a10420
> Minni/M
-6403a10420,10421
+6403a10422,10423
> Minnnie/M
> Minny/M
-6405a10424
+6405a10426
> Minor/M
-6410a10430
+6410a10432
> Minta/M
-6414a10435
+6414a10437
> Miquela/M
-6417a10439,10441
+6417a10441,10443
> Mirabel/M
> Mirabella/M
> Mirabelle/M
-6418a10443
+6418a10445
> Miran/M
-6419a10445,10448
+6419a10447,10450
> Mireielle/M
> Mireille/M
> Mirella/M
> Mirelle/M
-6421a10451,10452
+6421a10453,10454
> Mirilla/M
> Mirna/M
-6423a10455,10456
+6423a10457,10458
> Mischa/M
> Misha/M
-6425a10459
+6425a10461
> Missie/M
-6433a10468
+6433a10470
> Misti
-6436a10472
+6436a10474
> Mitchael/M
-6457a10494,10496
+6457a10496,10498
> Modesta/M
> Modestia/M
> Modestine/M
-6458a10498
+6458a10500
> Modesty/M
-6469a10510,10511
+6469a10512,10513
> Mohandas/M
> Mohandis/M
-6475a10518
+6475a10520
> Moina/M
-6477c10520
+6477c10522
< Moises
---
> Moise/MS
-6478a10522
+6478a10524
> Moishe/M
-6486a10531,10532
+6486a10533,10534
> Mollee/M
> Molli/M
-6494a10541
+6494a10543
> Mommy/M
-6498a10546
+6498a10548
> Monah/M
-6510a10559
+6510a10561
> Monika/M
-6514a10564
+6514a10566
> Monro/M
-6535a10586
+6535a10588
> Monti/M
-6549a10601
+6549a10603
> Mora/M
-6553a10606,10607
+6553a10608,10609
> Mord/M
> Mordecai
-6554a10609
+6554a10611
> Mordy/M
-6555a10611,10612
+6555a10613,10614
> Moreen/M
> Morena/M
-6556a10614
+6556a10616
> Morey/M
-6557a10616,10621
+6557a10618,10623
> Morgana/M
> Morganica/M
> Morganne/M
> Morgen/M
> Morgun/M
> Moria/M
-6558a10623
+6558a10625
> Morie/M
-6560a10626
+6560a10628
> Morissa/M
-6561a10628,10629
+6561a10630,10631
> Moritz/M
> Morlee/M
-6562a10631
+6562a10633
> Morly/M
-6564a10634
+6564a10636
> Morna/M
-6570a10641
+6570a10643
> Morrie/M
-6573a10645
+6573a10647
> Morry/M
-6575c10647,10649
+6575c10649,10651
< Mort/M
---
> Mort/MN
> Morten/M
> Mortie/M
-6577a10652
+6577a10654
> Morty/M
-6579a10655
+6579a10657
> Mose/SM
-6582a10659
+6582a10661
> Moshe/M
-6596a10674,10675
+6596a10676,10677
> Moyna/M
> Moyra/M
-6600c10679,10680
+6600c10681,10682
< Mozilla/M
---
> Mozelle/M
> Mozes/M
-6608a10689,10691
+6608a10691,10693
> Muffin/M
> Mufi/M
> Mufinella/M
-6613a10697
+6613a10699
> Muire/M
-6628a10713
+6628a10715
> Munmro/M
-6630a10716
+6630a10718
> Munroe/M
-6637a10724,10726
+6637a10726,10728
> Murdock/M
> Mureil/M
> Murial/M
-6638a10728
+6638a10730
> Murielle/M
-6645a10736,10737
+6645a10738,10739
> Murry/M
> Murvyn/M
-6657a10750
+6657a10752
> My/M
-6659a10753,10754
+6659a10755,10756
> Myca/M
> Mycah/M
-6662c10757,10758
+6662c10759,10760
< Myers
---
> Mychal/M
> Myer/SM
-6664a10761
+6664a10763
> Mylo/M
-6665a10763,10764
+6665a10765,10766
> Myrah/M
> Myranda/M
-6666a10766,10769
+6666a10768,10771
> Myriam/M
> Myrilla/M
> Myrle/M
> Myrlene/M
-6668a10772,10775
+6668a10774,10777
> Myrta/M
> Myrtia/M
> Myrtice/M
> Myrtie/M
-6669a10777,10778
+6669a10779,10780
> Myrvyn/M
> Myrwyn/M
-6670a10780
+6670a10782
> MySpell/M
-6720a10831,10833
+6720a10833,10835
> Nada/M
> Nadean/M
> Nadeen/M
-6723a10837,10839
+6723a10839,10841
> Nadiya/M
> Nady/M
> Nadya/M
-6733a10850
+6733a10852
> Nalani/M
-6738a10856
+6738a10858
> Nana/M
-6739a10858,10861
+6739a10860,10863
> Nananne/M
> Nance/M
> Nancee/M
> Nancey/M
-6740a10863,10864
+6740a10865,10866
> Nanci/M
> Nancie/M
-6741a10866
+6741a10868
> Nanete/M
-6742a10868,10870
+6742a10870,10872
> Nani/M
> Nanice/M
> Nanine/M
-6744a10873,10874
+6744a10875,10876
> Nannette/M
> Nanni/M
-6745a10876,10877
+6745a10878,10879
> Nanny/M
> Nanon/M
-6749a10882
+6749a10884
> Naoma/M
-6750a10884
+6750a10886
> Nap/M
-6755a10890,10891
+6755a10892,10893
> Nappie/M
> Nappy/M
-6756a10893
+6756a10895
> Nara
-6757a10895,10896
+6757a10897,10898
> Nari/M
> Nariko/M
-6767a10907,10911
+6767a10909,10913
> Nata/M
> Natal/M
> Natala/M
> Natale/M
> Natalee/M
-6769a10914,10917
+6769a10916,10919
> Natalina/M
> Nataline/M
> Natalya/M
> Nataniel/M
-6770a10919
+6770a10921
> Natassia/M
-6772a10922,10923
+6772a10924,10925
> Nathalia/M
> Nathalie/M
-6773a10925,10926
+6773a10927,10928
> Nathanael
> Nathanial/M
-6774a10928
+6774a10930
> Nathanil/M
-6775a10930
+6775a10932
> Natividad/M
-6776a10932,10933
+6776a10934,10935
> Natka/M
> Natty/M
-6800a10958,10963
+6800a10960,10965
> Neala/M
> Neale/M
> Neall/M
> Nealon/M
> Nealson/M
> Nealy/M
-6808a10972,10979
+6808a10974,10981
> Neda/M
> Nedda/M
> Neddie/M
@@ -6460,7 +6464,7 @@
> Neel/M
> Neely/M
> Nefen/M
-6818c10989,10994
+6818c10991,10996
< Neil/M
---
> Neil/SM
@@ -6469,18 +6473,18 @@
> Neill/M
> Neilla/M
> Neille/M
-6819a10996,10997
+6819a10998,10999
> Nelia/M
> Nelie/M
-6820a10999,11000
+6820a11001,11002
> Nelle/M
> Nelli/M
-6822a11003
+6822a11005
> Nels/N
-6834a11016,11017
+6834a11018,11019
> Nerissa/M
> Nerita/M
-6835a11019,11025
+6835a11021,11027
> Neron/M
> Nert/M
> Nerta/M
@@ -6488,45 +6492,45 @@
> Nerti/M
> Nertie/M
> Nerty/M
-6837a11028
+6837a11030
> Nessa/M
-6838a11030,11034
+6838a11032,11036
> Nessi/M
> Nessie/M
> Nessy/M
> Nesta/M
> Nester/M
-6844c11040,11041
+6844c11042,11043
< Netscape/M
---
> Netta/M
> Netti/M
-6845a11043,11044
+6845a11045,11046
> Nettle/M
> Netty/M
-6851a11051,11054
+6851a11053,11056
> Nevil/M
> Nevile/M
> Neville/M
> Nevin/MS
-6852a11056
+6852a11058
> Nevsa/M
-6862a11067
+6862a11069
> Neysa/M
-6866a11072,11073
+6866a11074,11075
> Nial/M
> Niall/M
-6875a11083
+6875a11085
> Nichol/SM
-6878c11086
+6878c11088
< Nichols
---
> Nicholle/M
-6881a11090,11092
+6881a11092,11094
> Nickey/M
> Nicki/M
> Nickie/M
-6883c11094,11099
+6883c11096,11101
< Nickolas
---
> Nicko/M
@@ -6535,221 +6539,221 @@
> Nickolaus/M
> Nicky/M
> Nico/M
-6885a11102
+6885a11104
> Nicol/M
-6886a11104
+6886a11106
> Nicolai/S
-6887a11106,11111
+6887a11108,11113
> Nicolea/M
> Nicolette/M
> Nicoli/SM
> Nicolina/M
> Nicoline/M
> Nicolle/M
-6890c11114,11115
+6890c11116,11117
< Nielsen
---
> Niel/SM
> Niels/N
-6899a11125
+6899a11127
> Nikaniki/M
-6900a11127
+6900a11129
> Niki/M
-6903a11131,11133
+6903a11133,11135
> Nikkie/M
> Niko/SM
> Nikola/SM
-6904a11135,11136
+6904a11137,11138
> Nikolaos/M
> Nikolaus/M
-6905a11138,11140
+6905a11140,11142
> Nikoletta/M
> Nikolia/M
> Nikolos/M
-6907c11142,11144
+6907c11144,11146
< Nile/M
---
> Nil/SM
> Nile/SM
> Nilson/M
-6910a11148,11149
+6910a11150,11151
> Ninetta/M
> Ninette/M
-6911a11151,11153
+6911a11153,11155
> Ninnetta/M
> Ninnette/M
> Ninon/M
-6919a11162
+6919a11164
> Nissa/M
-6920a11164,11166
+6920a11166,11168
> Nisse/M
> Nissie/M
> Nissy/M
-6922a11169,11170
+6922a11171,11172
> Niven/M
> Nixie
-6926a11175
+6926a11177
> Noach/M
-6927a11177,11180
+6927a11179,11182
> Noak/M
> Noam/M
> Noami/M
> Nobe/M
-6929a11183
+6929a11185
> Nobie/M
-6930a11185
+6930a11187
> Noby/M
-6932a11188,11190
+6932a11190,11192
> Noelani/M
> Noell/M
> Noella/M
-6933a11192,11193
+6933a11194,11195
> Noellyn/M
> Noelyn/M
-6938a11199,11204
+6938a11201,11206
> Nolana/M
> Noland/M
> Nolie/M
> Noll/M
> Nollie/M
> Nolly/M
-6939a11206
+6939a11208
> Nomi/M
-6940a11208,11212
+6940a11210,11214
> Nonah/M
> Noni/M
> Nonie/M
> Nonna/M
> Nonnah/M
-6942a11215
+6942a11217
> Norah/M
-6944a11218,11219
+6944a11220,11221
> Norbie/M
> Norby/M
-6945a11221
+6945a11223
> Norean/M
-6946a11223
+6946a11225
> Norene/M
-6948a11226,11227
+6948a11228,11229
> Norina/M
> Norine/M
-6952a11232,11233
+6952a11234,11235
> Normie/M
> Normy/M
-6954c11235,11237
+6954c11237,11239
< Norris
---
> Norri/MS
> Norrie/M
> Norry/M
-6973a11257
+6973a11259
> Notre
-6979a11264
+6979a11266
> Novelia/M
-6985a11271
+6985a11273
> Nowell/M
-7001a11288,11289
+7001a11290,11291
> Nydia/M
> Nye/M
-7002a11291
+7002a11293
> Nyssa/M
-7042c11331
+7042c11333
< Ob/M
---
> Ob/MD
-7043a11333,11335
+7043a11335,11337
> Obadias/M
> Obed/M
> Obediah/M
-7046a11339,11341
+7046a11341,11343
> Obidiah/M
> Obie
> Oby/M
-7057a11353
+7057a11355
> Octavius/M
-7058a11355,11358
+7058a11357,11360
> Ode/RM
> Odele/M
> Odelia/M
> Odelinda/M
-7059a11360,11361
+7059a11362,11363
> Odella/M
> Odelle/M
-7062a11365,11370
+7062a11367,11372
> Odetta/M
> Odette/M
> Odey/M
> Odie/M
> Odilia/M
> Odille/M
-7064a11373
+7064a11375
> Odo/M
-7065a11375
+7065a11377
> Ody/M
-7071a11382
+7071a11384
> Ofella/M
-7073a11385
+7073a11387
> Ofilia/M
-7074a11387
+7074a11389
> Ogdan/M
-7075a11389
+7075a11391
> Ogdon/M
-7094a11409
+7094a11411
> Olag/M
-7100a11416
+7100a11418
> Ole/MV
-7102a11419,11420
+7102a11421,11422
> Olenka/M
> Olenolin/M
-7103a11422
+7103a11424
> Olia/M
-7104a11424
+7104a11426
> Olimpia/M
-7106a11427,11428
+7106a11429,11430
> Olivero/M
> Olivette/M
-7109c11431,11433
+7109c11433,11435
< Olivier
---
> Olivie/MR
> Oliviero/M
> Oliy/M
-7110a11435
+7110a11437
> Olly/M
-7114a11440,11443
+7114a11442,11445
> Olva/M
> Olvan/M
> Olwen/M
> Olympe/M
-7118a11448
+7118a11450
> Olympie/M
-7125a11456
+7125a11458
> Omero/M
-7128a11460
+7128a11462
> Ondrea/M
-7132a11465,11467
+7132a11467,11469
> Onfre/M
> Onfroi/M
> Onida/M
-7134a11470
+7134a11472
> Onofredo/M
-7139a11476
+7139a11478
> Oona/M
-7141a11479,11480
+7141a11481,11482
> Opalina/M
> Opaline/M
-7143a11483
+7143a11485
> Ophelie/M
-7148a11489,11493
+7148a11491,11495
> Oralee/M
> Oralia/M
> Oralie/M
> Oralla/M
> Oralle/M
-7151a11497,11498
+7151a11499,11500
> Orazio/M
> Orbadiah/M
-7157a11505,11511
+7157a11507,11513
> Orel
> Orelee/M
> Orelia/M
@@ -6757,12 +6761,12 @@
> Orella/M
> Orelle/M
> Oren/M
-7159a11514
+7159a11516
> Oriana/M
-7167a11523,11524
+7167a11525,11526
> Orlan/M
> Orland/M
-7174c11531,11537
+7174c11533,11539
< Orr/M
---
> Orr/MN
@@ -6772,348 +6776,348 @@
> Orsa/M
> Orsola/M
> Orson/M
-7175a11539
+7175a11541
> Ortensia/M
-7177a11542,11543
+7177a11544,11545
> Orton/M
> Orv/M
-7186a11553,11554
+7186a11555,11556
> Osbourn/M
> Osbourne/M
-7194a11563,11565
+7194a11565,11567
> Osmond/M
> Osmund/M
> Ossie/M
-7198a11570,11574
+7198a11572,11576
> Oswell/M
> Otes
> Otha/M
> Othelia/M
> Othella/M
-7199a11576,11578
+7199a11578,11580
> Othilia/M
> Othilie/M
> Otho/M
-7201a11581
+7201a11583
> Ottilie/M
-7217a11598
+7217a11600
> Ozzy/M
-7264a11646,11648
+7264a11648,11650
> Packston/M
> Paco/M
> Pacorro/M
-7265a11650,11651
+7265a11652,11653
> Paddie/M
> Paddy/M
-7266a11653,11654
+7266a11655,11656
> Padget/M
> Padgett/M
-7267a11656,11658
+7267a11658,11660
> Padraic/M
> Padraig/M
> Padriac/M
-7272a11664
+7272a11666
> Pail/M
-7288a11681
+7288a11683
> Palin/MS
-7289a11683
+7289a11685
> Pall/M
-7291c11685
+7291c11687
< Palmer
---
> Palm/MR
-7294a11689
+7294a11691
> Paloma/M
-7297a11693,11694
+7297a11695,11696
> Pamelina/M
> Pamella/M
-7298a11696,11698
+7298a11698,11700
> Pammi/M
> Pammie/M
> Pammy/M
-7303a11704,11705
+7303a11706,11707
> Panchito/M
> Pancho/M
-7307a11710
+7307a11712
> Pansie/M
-7312a11716,11721
+7312a11718,11723
> Paola/M
> Paolina/M
> Paolo/M
> Papagena/M
> Papageno/M
> Paquito/M
-7325a11735
+7325a11737
> Parke/M
-7335a11746,11747
+7335a11748,11749
> Parrnell/M
> Parry
-7341a11754
+7341a11756
> Pascale/M
-7347c11760
+7347c11762
< Pat
---
> Pat/N
-7351a11765
+7351a11767
> Paten/M
-7352a11767,11768
+7352a11769,11770
> Patience/M
> Patin/M
-7353a11770,11771
+7353a11772,11773
> Paton
> Patric/M
-7356a11775
+7356a11777
> Patricio/M
-7357a11777,11779
+7357a11779,11781
> Patrizia/M
> Patrizio/M
> Patrizius/M
-7358a11781
+7358a11783
> Patten/M
-7360a11784,11785
+7360a11786,11787
> Pattie/M
> Pattin/M
-7364a11790,11791
+7364a11792,11793
> Paule/M
> Pauletta/M
-7366a11794,11795
+7366a11796,11797
> Paulie/M
> Paulina/M
-7367a11797,11799
+7367a11799,11801
> Paulita/M
> Paulo/M
> Pauly/M
-7368a11801,11803
+7368a11803,11805
> Pavel/M
> Pavia/M
> Pavla/M
-7372a11808,11809
+7372a11810,11811
> Paxon/M
> Paxton
-7375c11812
+7375c11814
< Paypal/M
---
> Payton/M
-7379a11817
+7379a11819
> Peadar/M
-7380a11819
+7380a11821
> Pearce/M
-7381a11821,11822
+7381a11823,11824
> Pearla/M
> Pearle/M
-7382a11824
+7382a11826
> Pearline/M
-7384a11827
+7384a11829
> Pebrook/M
-7388a11832
+7388a11834
> Peder/M
-7392a11837,11839
+7392a11839,11841
> Pegeen/M
> Peggi/M
> Peggie/M
-7395a11843
+7395a11845
> Peirce/M
-7405c11853
+7405c11855
< Penelope/M
---
> Penelopa/M
-7408a11857,11858
+7408a11859,11860
> Penni/M
> Pennie/M
-7413a11864
+7413a11866
> Penrod/M
-7422a11874,11876
+7422a11876,11878
> Pepe/M
> Pepi/M
> Pepillo/M
-7423a11878,11879
+7423a11880,11881
> Pepita/M
> Pepito/M
-7426a11883
+7426a11885
> Perceval
-7431a11889,11891
+7431a11891,11893
> Peri/M
> Peria/M
> Perice/M
-7434c11894
+7434c11896
< Perkins
---
> Perkin/MS
-7435a11896,11897
+7435a11898,11899
> Perla/M
> Perle/M
-7438a11901
+7438a11903
> Pernell/M
-7441a11905,11907
+7441a11907,11909
> Perren/M
> Perri/M
> Perrine/M
-7449a11916
+7449a11918
> Persis
-7453a11921,11922
+7453a11923,11924
> Pet
> Peta/M
-7458a11928,11930
+7458a11930,11932
> Peterus/M
> Petey/M
> Petr/M
-7460a11933,11937
+7460a11935,11939
> Petrina/M
> Petronella/M
> Petronia/M
> Petronilla/M
> Petronille/M
-7461a11939
+7461a11941
> Petunia/M
-7462a11941,11942
+7462a11943,11944
> Peyter/M
> Peyton/M
-7467a11948
+7467a11950
> Phaidra/M
-7473a11955,11956
+7473a11957,11958
> Phebe
> Phedra/M
-7474a11958
+7474a11960
> Phelia/M
-7478a11963
+7478a11965
> Philbert/M
-7481a11967,11968
+7481a11969,11970
> Philipa/M
> Philippa/M
-7484a11972
+7484a11974
> Philis/M
-7485a11974,11975
+7485a11976,11977
> Phillida/M
> Phillie/M
-7487a11978,11980
+7487a11980,11982
> Phillipe/M
> Phillipp/M
> Phillis/M
-7488a11982,11984
+7488a11984,11986
> Philomena/M
> Phineas/M
> Phip/M
-7494a11991,11992
+7494a11993,11994
> Photoshopped
> Photoshopping
-7498a11997,11998
+7498a11999,12000
> Phylis/M
> Phyllida/M
-7499a12000,12002
+7499a12002,12004
> Phyllys/M
> Phylys/M
> Pia/M
-7509a12013
+7509a12015
> Pictor
-7510a12015
+7510a12017
> Pier/M
-7511a12017
+7511a12019
> Pierette/M
-7512a12019
+7512a12021
> Pierrette/M
-7513a12021,12026
+7513a12023,12028
> Pierson/M
> Pieter/M
> Pietra/M
> Pietrek/M
> Pietro/M
> Piggy/M
-7520a12034,12035
+7520a12036,12037
> Pincas/M
> Pinchas/M
-7527a12043,12046
+7527a12045,12048
> Piotr/M
> Pip/MR
> Piper/M
> Pippa/M
-7528a12048,12049
+7528a12050,12051
> Pippo/M
> Pippy/M
-7559c12080
+7559c12082
< Pleiades's
---
> Pleiades/M
-7620a12142
+7620a12144
> Poppy/M
-7626a12149
+7626a12151
> Portie/M
-7631a12155
+7631a12157
> Porty/M
-7639a12164
+7639a12166
> Poul/M
-7647c12172
+7647c12174
< Pr/M
---
> Pr/MN
-7661a12187
+7661a12189
> Pren/M
-7662a12189
+7662a12191
> Prent/M
-7663a12191
+7663a12193
> Prentiss/M
-7679a12208,12211
+7679a12210,12213
> Prinz
> Pris
> Prisca/M
> Priscella/M
-7680a12213
+7680a12215
> Prissie/M
-7707a12241
+7707a12243
> Pru/M
-7709a12244,12246
+7709a12246,12248
> Prudi/M
> Prudy/M
> Prue/M
-7713a12251
+7713a12253
> Pryce/M
-7727a12266
+7727a12268
> Puff/M
-7751a12291
+7751a12293
> Putnem/M
-7793a12334
+7793a12336
> Queenie/M
-7795a12337
+7795a12339
> Quent/M
-7796a12339
+7796a12341
> Querida/M
-7798a12342,12344
+7798a12344,12346
> Quill/M
> Quillan/M
> Quincey/M
-7799a12346
+7799a12348
> Quinlan/M
-7800a12348,12350
+7800a12350,12352
> Quint/M
> Quinta/M
> Quintana/M
-7801a12352,12354
+7801a12354,12356
> Quintilla/M
> Quintin/M
> Quintina/M
-7802a12356
+7802a12358
> Quintus/M
-7811c12365
+7811c12367
< R/MD
---
> R/MGD
-7841a12396
+7841a12398
> Rab/M
-7842a12398
+7842a12400
> Rabbi/M
-7844a12401
+7844a12403
> Rabi
-7847a12405
+7847a12407
> Rachele/M
-7850a12409
+7850a12411
> Rad/M
-7851a12411,12412
+7851a12413,12414
> Raddie/M
> Raddy/M
-7852a12414,12416
+7852a12416,12418
> Raeann/M
> Raf/M
> Rafa/M
-7853a12418,12427
+7853a12420,12429
> Rafaela/M
> Rafaelia/M
> Rafaelita/M
@@ -7124,10 +7128,10 @@
> Raffaello/M
> Raffarty/M
> Rafferty/M
-7854a12429,12430
+7854a12431,12432
> Rafi/M
> Ragnar/M
-7855a12432,12439
+7855a12434,12441
> Rahal/M
> Rahel/M
> Raimondo/M
@@ -7136,74 +7140,74 @@
> Raina/M
> Raine/MR
> Rainer/M
-7856a12441
+7856a12443
> Rakel/M
-7857a12443,12444
+7857a12445,12446
> Ralf/M
> Ralina/M
-7858a12446
+7858a12448
> Ram
-7869a12458
+7869a12460
> Ramonda/M
-7873a12463,12465
+7873a12465,12467
> Rana/M
> Rance/M
> Rancell/M
-7874a12467
+7874a12469
> Randa/M
-7876a12470
+7876a12472
> Randee/M
-7877a12472
+7877a12474
> Randene/M
-7878a12474,12475
+7878a12476,12477
> Randie/M
> Randolf/M
-7880a12478
+7880a12480
> Ranee/M
-7881a12480,12483
+7881a12482,12485
> Rani/M
> Rania/M
> Ranice/M
> Ranique/M
-7883a12486,12488
+7883a12488,12490
> Ranna/M
> Ransell/M
> Ransom/M
-7885a12491
+7885a12493
> Raphaela/M
-7887a12494
+7887a12496
> Raquela/M
-7889a12497,12498
+7889a12499,12500
> Rasia/M
> Rasla/M
-7897a12507,12510
+7897a12509,12512
> Raven/M
> Ravi/M
> Ravid/M
> Raviv/M
-7898a12512
+7898a12514
> Rawley/M
-7901a12516,12517
+7901a12518,12519
> Raychel/M
> Raye/M
-7903a12520
+7903a12522
> Raymund/M
-7904a12522,12527
+7904a12524,12529
> Rayna/M
> Raynard/M
> Raynell/M
> Rayner/M
> Raynor/M
> Rayshell/M
-7907a12531,12533
+7907a12533,12535
> Rea/M
> Read/GM
> Reade
-7910a12537
+7910a12539
> Reagen/M
-7911a12539
+7911a12541
> Reamonn/M
-7914c12542,12546
+7914c12544,12548
< Rebecca
---
> Rebbecca/M
@@ -7211,38 +7215,38 @@
> Rebeca/M
> Rebecka/M
> Rebeka/M
-7915a12548
+7915a12550
> Rebekkah/M
-7918a12552
+7918a12554
> Redd/M
-7922a12557,12558
+7922a12559,12560
> Ree/DSM
> Reeba/M
-7923a12560
+7923a12562
> Reece/M
-7924a12562
+7924a12564
> Reena/M
-7925a12564,12565
+7925a12566,12567
> Reeta/M
> Reeva/M
-7928a12569,12572
+7928a12571,12574
> Reg/N
> Regan/M
> Regen/M
> Reggi/MS
-7929a12574
+7929a12576
> Reggy/M
-7932a12578,12579
+7932a12580,12581
> Reginauld/M
> Regine/M
-7937c12584,12587
+7937c12586,12589
< Reid
---
> Reid/R
> Reidar/M
> Reider/M
> Reiko/M
-7939c12589,12593
+7939c12591,12595
< Reinaldo/M
---
> Reina/M
@@ -7250,122 +7254,122 @@
> Reinaldo/SM
> Reine/M
> Reinhard/M
-7941a12596,12600
+7941a12598,12602
> Reinold/M
> Reinwald/M
> Rem/M
> Remanence/S
> Remanent
-7945a12605
+7945a12607
> Remy/M
-7946a12607,12608
+7946a12609,12610
> Renado/M
> Renae/M
-7947a12610,12611
+7947a12612,12613
> Renaldo/M
> Renard/M
-7948a12613,12616
+7948a12615,12618
> Renata/M
> Renate/M
> Renato/M
> Renaud/M
-7951a12620,12623
+7951a12622,12625
> Renell/M
> Renelle/M
> Renie/M
> Rennie/M
-7961a12634,12636
+7961a12636,12638
> Reta/M
> Retha/M
> Reube/M
-7965a12641
+7965a12643
> Reuven/M
-7970a12647
+7970a12649
> Revkah/M
-7972a12650
+7972a12652
> Rey/M
-7977c12655,12656
+7977c12657,12658
< Reynolds
---
> Reynard/M
> Reynold/MS
-7980a12660
+7980a12662
> Rheba/M
-7983a12664,12668
+7983a12666,12670
> Rheta/M
> Rhett/M
> Rhetta/M
> Rhiamon/M
> Rhianna/M
-7984a12670
+7984a12672
> Rhianon/M
-7987a12674
+7987a12676
> Rhode
-7990a12678,12681
+7990a12680,12683
> Rhodia/M
> Rhodie/M
> Rhody/M
> Rhona/M
-7992a12684,12687
+7992a12686,12689
> Rhys/M
> Riane/M
> Riannon/M
> Rianon/M
-7993a12689,12691
+7993a12691,12693
> Ric/M
> Rica/M
> Ricard/M
-7994a12693,12694
+7994a12695,12696
> Ricca/M
> Riccardo/M
-7997a12698
+7997a12700
> Richardo/M
-7998a12700
+7998a12702
> Richart/M
-8001a12704
+8001a12706
> Richmound/M
-8003a12707,12708
+8003a12709,12710
> Richy/M
> Rici/M
-8004a12710
+8004a12712
> Rickard/M
-8005a12712
+8005a12714
> Rickert/M
-8006a12714
+8006a12716
> Ricki/M
-8010a12719
+8010a12721
> Ricoriki/M
-8022a12732,12734
+8022a12734,12736
> Rik/M
> Riki/M
> Rikki/M
-8025a12738,12740
+8025a12740,12742
> Rina/M
> Rinaldo/M
> Ring/M
-8028a12744,12746
+8028a12746,12748
> Riobard/M
> Riordan/M
> Rip/M
-8029a12748
+8029a12750
> Risa/M
-8032a12752
+8032a12754
> Ritchie/M
-8034c12754,12755
+8034c12756,12757
< Rivas
---
> Riva/SM
> Rivalee/M
-8037a12759
+8037a12761
> Rivi/M
-8038a12761,12762
+8038a12763,12764
> Rivkah/M
> Rivy/M
-8042a12767,12769
+8042a12769,12771
> Roana/M
> Roanna/M
> Roanne/M
-8044c12771,12775
+8044c12773,12777
< Rob/M
---
> Roarke/M
@@ -7373,167 +7377,167 @@
> Robb/M
> Robbert/M
> Robbi/M
-8047a12779,12782
+8047a12781,12784
> Robbyn/M
> Robena/M
> Robenia/M
> Robers/M
-8055a12791,12796
+8055a12793,12798
> Robina/M
> Robinet/M
> Robinett/M
> Robinetta/M
> Robinette/M
> Robinia/M
-8060a12802
+8060a12804
> Roby/M
-8062a12805
+8062a12807
> Roch/M
-8065a12809,12810
+8065a12811,12812
> Rochell/M
> Rochella/M
-8067a12813
+8067a12815
> Rochette/M
-8069a12816
+8069a12818
> Rockey/M
-8070a12818
+8070a12820
> Rockie/M
-8075a12824,12825
+8075a12826,12827
> Roda/M
> Rodd/M
-8076a12827,12830
+8076a12829,12832
> Roddie/M
> Roddy/M
> Roderic/M
> Roderich/M
-8077a12832,12833
+8077a12834,12835
> Roderigo/M
> Rodge/MZR
-8078a12835,12837
+8078a12837,12839
> Rodham/M
> Rodi/M
> Rodie/M
-8079a12839
+8079a12841
> Rodina/M
-8081a12842,12843
+8081a12844,12845
> Rodolph/M
> Rodolphe/M
-8084a12847
+8084a12849
> Rodrique/M
-8087a12851
+8087a12853
> Rog/MRZ
-8089c12853
+8089c12855
< Roger/S
---
> Rogerio/M
-8090a12855
+8090a12857
> Roi/SM
-8094a12860
+8094a12862
> Roldan/M
-8095a12862,12864
+8095a12864,12866
> Roley/M
> Rolf
> Rolfe/M
-8098c12867,12869
+8098c12869,12871
< Rollins
---
> Rollie/M
> Rollin/MS
> Rollo
-8099a12871
+8099a12873
> Rolph/M
-8101a12874,12875
+8101a12876,12877
> Roma/M
> Romain/M
-8116a12891,12893
+8116a12893,12895
> Romola/M
> Romona/M
> Romonda/M
-8117a12895
+8117a12897
> Romy/M
-8118a12897
+8118a12899
> Rona/M
-8119a12899
+8119a12901
> Ronalda/M
-8120a12901,12904
+8120a12903,12906
> Ronica/M
> Ronna/M
> Ronni/M
> Ronnica/M
-8124a12909,12910
+8124a12911,12912
> Roobbie/M
> Roomba/MS
-8128a12915,12918
+8128a12917,12920
> Rora/M
> Rori/M
> Rorie/M
> Rorke/M
-8130a12921
+8130a12923
> Ros
-8131a12923,12926
+8131a12925,12928
> Rosabel/M
> Rosabella/M
> Rosabelle/M
> Rosaleen/M
-8132a12928
+8132a12930
> Rosalia/M
-8135a12932,12933
+8135a12934,12935
> Rosalinde/M
> Rosaline/M
-8136a12935,12938
+8136a12937,12940
> Rosalynd/M
> Rosamond/M
> Rosamund/M
> Rosana/M
-8139a12942
+8139a12944
> Rosco/M
-8142a12946,12947
+8142a12948,12949
> Roseanna/M
> Roseanne/M
-8144a12950,12952
+8144a12952,12954
> Roselia/M
> Roselin/M
> Roseline/M
-8145a12954,12955
+8145a12956,12957
> Roselle/M
> Rosemaria/M
-8147a12958
+8147a12960
> Rosemonde/M
-8149a12961
+8149a12963
> Rosene/M
-8151a12964,12965
+8151a12966,12967
> Rosette/M
> Roshelle/M
-8153a12968,12969
+8153a12970,12971
> Rosina/M
> Rosita/M
-8154a12971
+8154a12973
> Rosmunda/M
-8156a12974
+8156a12976
> Rossie/M
-8157a12976
+8157a12978
> Rossy/M
-8161a12981
+8161a12983
> Rosy/M
-8170a12991
+8170a12993
> Rouvin/M
-8171a12993,12994
+8171a12995,12996
> Row/MN
> Rowan/M
-8172a12996
+8172a12998
> Rowen/M
-8175a13000,13003
+8175a13002,13005
> Rowney/M
> Roxana/M
> Roxane/M
> Roxanna/M
-8176a13005
+8176a13007
> Roxi/M
-8177a13007
+8177a13009
> Roxine/M
-8180a13011
+8180a13013
> Royall/M
-8181a13013,13021
+8181a13015,13023
> Roz/M
> Rozalie/M
> Rozalin/M
@@ -7543,229 +7547,229 @@
> Roze/M
> Rozele/M
> Rozella/M
-8182a13023,13024
+8182a13025,13026
> Rozina/M
> Rriocard/M
-8186a13029
+8186a13031
> Rube/M
-8187a13031,13033
+8187a13033,13035
> Rubetta/M
> Rubi/M
> Rubia/M
-8188a13035
+8188a13037
> Rubie/M
-8190a13038
+8190a13040
> Rubina/M
-8193a13042,13046
+8193a13044,13048
> Rudd/M
> Ruddie/M
> Ruddy/M
> Rudie/M
> Rudiger/M
-8194a13048
+8194a13050
> Rudolfo/M
-8197a13052
+8197a13054
> Rufe/M
-8199a13055
+8199a13057
> Ruggiero/M
-8209a13066,13069
+8209a13068,13071
> Ruperta/M
> Ruperto/M
> Ruprecht/M
> Rurik
-8220a13081,13082
+8220a13083,13084
> Rustie/M
> Rustin/M
-8223c13085
+8223c13087
< Rutgers
---
> Rutger/MS
-8224a13087,13089
+8224a13089,13091
> Ruthann/M
> Ruthanne/M
> Ruthe/M
-8225a13091
+8225a13093
> Ruthi/M
-8226a13093
+8226a13095
> Ruthy/M
-8227a13095,13097
+8227a13097,13099
> Rutter/M
> Ruttger/M
> Ruy/M
-8233a13104,13105
+8233a13106,13107
> Ryann/M
> Rycca/M
-8235a13108,13109
+8235a13110,13111
> Ryley/M
> Ryon/M
-8237c13111,13112
+8237c13113,13114
< S/MN
---
> Ryun/M
> S/MNY
-8285a13161
+8285a13163
> Saba/M
-8291a13168
+8291a13170
> Sabra
-8295a13173
+8295a13175
> Sacha/M
-8297a13176
+8297a13178
> Sada/M
-8301a13181
+8301a13183
> Sadella/M
-8303a13184
+8303a13186
> Sadye/M
-8311a13193
+8311a13195
> Saidee/M
-8322a13205
+8322a13207
> Salaidh/M
-8325a13209
+8325a13211
> Saleem/M
-8327a13212
+8327a13214
> Salim/M
-8332a13218,13219
+8332a13220,13221
> Sallee/M
> Salli/M
-8335a13223,13226
+8335a13225,13228
> Sallyann/M
> Sallyanne/M
> Salmon/M
> Saloma/M
-8336a13228,13231
+8336a13230,13233
> Salomi/M
> Salomo/M
> Salomon/M
> Salomone/M
-8343a13239
+8343a13241
> Salvidor/M
-8349a13246
+8349a13248
> Samaria
-8362a13260
+8362a13262
> Samuele/M
-8371a13270,13274
+8371a13272,13276
> Sande/MZR
> Sander/M
> Sanderson/M
> Sandi/M
> Sandie/M
-8372a13276
+8372a13278
> Sandor/M
-8374a13279
+8374a13281
> Sandro/M
-8375a13281
+8375a13283
> Sandye/M
-8382a13289,13290
+8382a13291,13292
> Sanson/M
> Sansone/M
-8388a13297,13298
+8388a13299,13300
> Sapphira
> Sapphire/M
-8391a13302
+8391a13304
> Saraann/M
-8394a13306
+8394a13308
> Sarajane/M
-8400a13313,13316
+8400a13315,13318
> Saree/M
> Sarena/M
> Sarene/M
> Sarette/M
-8401a13318
+8401a13320
> Sarge/M
-8403a13321,13324
+8403a13323,13326
> Sari/M
> Sarina/M
> Sarine/M
> Sarita/M
-8407a13329
+8407a13331
> Sascha/M
-8408a13331
+8408a13333
> Sashenka/M
-8422a13346
+8422a13348
> Saudra/M
-8424c13348,13350
+8424c13350,13352
< Saunders
---
> Sauncho/M
> Saunder/MS
> Saunderson/M
-8427a13354
+8427a13356
> Sauveur/M
-8429a13357
+8429a13359
> Savina/M
-8433a13362
+8433a13364
> Saw/M
-8434a13364,13366
+8434a13366,13368
> Sawyere/M
> Sax
> Saxe/M
-8437c13369,13371
+8437c13371,13373
< Sayers
---
> Say/MRZ
> Sayer/MS
> Sayre/MS
-8444a13379
+8444a13381
> Scarface/M
-8445a13381,13382
+8445a13383,13384
> Scarlet/M
> Scarlett/M
-8498a13436
+8498a13438
> Scotti/M
-8518a13457
+8518a13459
> Seamus/M
-8519a13459
+8519a13461
> Seana/M
-8522a13463,13464
+8522a13465,13466
> Sebastiano/M
> Sebastien/M
-8528a13471
+8528a13473
> See/M
-8537a13481,13482
+8537a13483,13484
> Seka/M
> Sela/M
-8538a13484
+8538a13486
> Selby/M
-8540a13487,13488
+8540a13489,13490
> Selene/M
> Selestina/M
-8542a13491,13493
+8542a13493,13495
> Selia/M
> Selie/M
> Selig/M
-8543a13495,13497
+8543a13497,13499
> Selina/M
> Selinda/M
> Seline/M
-8545a13500,13501
+8545a13502,13503
> Sella/M
> Selle/MZ
-8554a13511
+8554a13513
> Sena/M
-8567a13525
+8567a13527
> Sephira/M
-8571a13530
+8571a13532
> sequitur
-8576a13536
+8576a13538
> Serene
-8577a13538,13539
+8577a13540,13541
> Serge/M
> Sergeant/M
-8578a13541
+8578a13543
> Sergent/M
-8585a13549
+8585a13551
> Seumas/M
-8600a13565,13566
+8600a13567,13568
> Shadow/M
> Shae/M
-8601a13568,13569
+8601a13570,13571
> Shaina/M
> Shaine/M
-8605a13574,13577
+8605a13576,13579
> Shalna/M
> Shalne/M
> Shalom/M
> Shamus/M
-8606a13579,13585
+8606a13581,13587
> Shanan/M
> Shanda/M
> Shandee/M
@@ -7773,36 +7777,36 @@
> Shandie/M
> Shandra/M
> Shandy/M
-8608a13588,13589
+8608a13590,13591
> Shani/M
> Shanie/M
-8610a13592,13594
+8610a13594,13596
> Shannah/M
> Shannan/M
> Shannen/M
-8611a13596,13598
+8611a13598,13600
> Shanon/M
> Shanta/M
> Shantee/M
-8613a13601,13602
+8613a13603,13604
> Shara/M
> Sharai/M
-8615a13605
+8615a13607
> Sharia/M
-8616a13607,13610
+8616a13609,13612
> Sharity/M
> Sharl/M
> Sharla/M
> Sharleen/M
-8617a13612
+8617a13614
> Sharline/M
-8618a13614
+8618a13616
> Sharona/M
-8621a13618
+8621a13620
> Sharyl/M
-8622a13620
+8622a13622
> Shaughn/M
-8631a13630,13636
+8631a13632,13638
> Shay/M
> Shayla/M
> Shaylah/M
@@ -7810,74 +7814,74 @@
> Shaylynn/M
> Shayna/M
> Shayne/M
-8635a13641,13643
+8635a13643,13645
> Sheela/M
> Sheelagh/M
> Sheelah/M
-8636a13645
+8636a13647
> Sheeree/M
-8637a13647,13648
+8637a13649,13650
> Sheff/M
> Sheffie/M
-8638a13650
+8638a13652
> Sheffy/M
-8639a13652,13657
+8639a13654,13659
> Sheilah/M
> Shel/MY
> Shela/M
> Shelagh/M
> Shelba/M
> Shelbi/M
-8640a13659
+8640a13661
> Shelden/M
-8644a13664,13665
+8644a13666,13667
> Shelli/M
> Shellie/M
-8646a13668,13669
+8646a13670,13671
> Shem/M
> Shena/M
-8649a13673
+8649a13675
> Shep/M
-8652a13677,13678
+8652a13679,13680
> Shepperd/M
> Sher/M
-8657a13684,13687
+8657a13686,13689
> Sherie/M
> Sherill/M
> Sherilyn/M
> Sherline/M
-8658a13689,13690
+8658a13691,13692
> Sherlocke/M
> Sherm/M
-8659a13692,13693
+8659a13694,13695
> Shermie/M
> Shermy/M
-8663a13698
+8663a13700
> Sherwin/M
-8664a13700,13701
+8664a13702,13703
> Sherwynd/M
> Sherye/M
-8675a13713
+8675a13715
> Shina/M
-8678a13717
+8678a13719
> Shir/M
-8679a13719,13722
+8679a13721,13724
> Shirl/M
> Shirlee/M
> Shirleen/M
> Shirlene/M
-8680a13724
+8680a13726
> Shirline/M
-8682a13727
+8682a13729
> Sholom/M
-8684a13730,13731
+8684a13732,13733
> Shoshana/M
> Shoshanna/M
-8692a13740,13742
+8692a13742,13744
> Shurlock/M
> Shurlocke/M
> Shurwood/M
-8698a13749,13755
+8698a13751,13757
> Siana/M
> Sianna/M
> Sib/M
@@ -7885,245 +7889,245 @@
> Sibby/M
> Sibeal/M
> Sibel/M
-8699a13757,13758
+8699a13759,13760
> Sibella/M
> Sibelle/M
-8701a13761,13762
+8701a13763,13764
> Sibilla/M
> Sibley/M
-8702a13764,13765
+8702a13766,13767
> Sibylla/M
> Sibylle/M
-8706a13770
+8706a13772
> Sidnee/M
-8707a13772,13774
+8707a13774,13776
> Sidoney/M
> Sidonia/M
> Sidonnie/M
-8711a13779,13784
+8711a13781,13786
> Siffre/M
> Sig
> Sigfrid/M
> Sigfried/M
> Sigismond/M
> Sigismondo/M
-8712a13786
+8712a13788
> Sigismundo/M
-8713a13788
+8713a13790
> Sigrid/M
-8714a13790
+8714a13792
> Sigvard/M
-8722a13799,13800
+8722a13801,13802
> Sile/M
> Sileas/M
-8725a13804,13809
+8725a13806,13811
> Silvain/M
> Silvan/M
> Silvana/M
> Silvano/M
> Silvanus/M
> Silvester/M
-8726a13811,13813
+8726a13813,13815
> Silvie/M
> Silvio/M
> Sim/SM
-8727a13815
+8727a13817
> Simeon/M
-8728a13817
+8728a13819
> Simmonds/M
-8730a13820
+8730a13822
> Simona/M
-8731a13822,13823
+8731a13824,13825
> Simonette/M
> Simonne/M
-8736a13829
+8736a13831
> Sinclare/M
-8737a13831
+8737a13833
> Sindee/M
-8745a13840
+8745a13842
> Siobhan/M
-8746a13842
+8746a13844
> Siouxie/M
-8748a13845,13848
+8748a13847,13850
> Sisely/M
> Sisile/M
> Sissie/M
> Sissy/M
-8752a13853
+8752a13855
> Siusan/M
-8754a13856
+8754a13858
> Siward/M
-8755a13858,13859
+8755a13860,13861
> Skell/M
> Skelly/M
-8756a13861,13864
+8756a13863,13866
> Skip/M
> Skipp/MR
> Skipper/M
> Skippie/M
-8757a13866
+8757a13868
> Skipton/M
-8758a13868
+8758a13870
> Sky/M
-8760a13871,13872
+8760a13873,13874
> Skylar/M
> Skyler/M
-8762a13875
+8762a13877
> Slade/M
-8778a13892
+8778a13894
> Sly/M
-8785a13900
+8785a13902
> Smitty/M
-8809a13925
+8809a13927
> Sofie/M
-8811c13927
+8811c13929
< Sol/M
---
> Sol/MY
-8812a13929,13930
+8812a13931,13932
> Sollie/M
> Solly/M
-8818a13937
+8818a13939
> Somerset
-8827a13947,13949
+8827a13949,13951
> Sonni/M
> Sonnie/M
> Sonnnie/M
-8832a13955,13956
+8832a13957,13958
> Sophey/M
> Sophi/M
-8836a13961
+8836a13963
> Sophronia/M
-8838a13964
+8838a13966
> Sorcha/M
-8839a13966
+8839a13968
> Sosanna/M
-8847c13974
+8847c13976
< Southerner/M
---
> Southerner/SM
-8875a14003
+8875a14005
> Spense/RM
-8881a14010
+8881a14012
> Spike/M
-8903a14033,14034
+8903a14035,14036
> Stace/M
> Stacee/M
-8905a14037
+8905a14039
> Stacia/M
-8908a14041,14042
+8908a14043,14044
> Stafani/M
> Staffard/M
-8909a14044
+8909a14046
> Staford/M
-8916c14051,14052
+8916c14053,14054
< Stan/M
---
> Stan/MY
> Standford/M
-8917a14054
+8917a14056
> Stanfield/M
-8918a14056,14057
+8918a14058,14059
> Stanislas/M
> Stanislaus/M
-8919a14059,14060
+8919a14061,14062
> Stanislaw/M
> Stanleigh/M
-8920a14062
+8920a14064
> Stanly/M
-8921a14064
+8921a14066
> Stanwood/M
-8922a14066
+8922a14068
> Star/M
-8925a14070,14072
+8925a14072,14074
> Starla/M
> Starlene/M
> Starlin/M
-8929a14077
+8929a14079
> Stavro/MS
-8933a14082,14083
+8933a14084,14085
> Stearn/M
> Stearne/M
-8934a14085
+8934a14087
> Stefa/M
-8935a14087
+8935a14089
> Stefania/M
-8936a14089,14093
+8936a14091,14095
> Stefano/M
> Steffane/M
> Steffen/M
> Steffi/M
> Steffie/M
-8944a14102
+8944a14104
> Stepha/M
-8945a14104,14105
+8945a14106,14107
> Stephana/M
> Stephani/M
-8946a14107,14108
+8946a14109,14110
> Stephannie/M
> Stephanus/M
-8947a14110
+8947a14112
> Stephenie/M
-8948a14112,14114
+8948a14114,14116
> Stephi/M
> Stephie/M
> Stephine/M
-8952a14119
+8952a14121
> Stesha/M
-8954a14122
+8954a14124
> Stevana/M
-8956a14125
+8956a14127
> Stevena/M
-8958a14128,14129
+8958a14130,14131
> Stevy/M
> Steward/M
-8960a14132,14133
+8960a14134,14135
> Stillman/M
> Stillmann/M
-8963a14137
+8963a14139
> Stinky/M
-8967a14142
+8967a14144
> Stoddard/M
-8975a14151,14154
+8975a14153,14156
> Storm/M
> Stormi/M
> Stormie/M
> Stormy/M
-9007a14187
+9007a14189
> Suellen/M
-9015a14196,14197
+9015a14198,14199
> Sukey/M
> Suki/M
-9018a14201
+9018a14203
> Sula/M
-9022a14206
+9022a14208
> Sully
-9039a14224
+9039a14226
> Sunny/M
-9040a14226
+9040a14228
> Sunshine/M
-9055a14242,14243
+9055a14244,14245
> Susanetta/M
> Susann/M
-9056a14245
+9056a14247
> Susannah/M
-9057a14247,14248
+9057a14249,14250
> Susette/M
> Susi/M
-9060a14252,14253
+9060a14254,14255
> Susy/M
> Sutherlan/M
-9064a14258,14259
+9064a14260,14261
> Suzann/M
> Suzanna/M
-9067a14263,14264
+9067a14265,14266
> Suzi/M
> Suzie/M
-9071a14269
+9071a14271
> Svend/M
-9087a14286
+9087a14288
> Swen/M
-9094a14294,14300
+9094a14296,14302
> Sybila/M
> Sybilla/M
> Sybille/M
@@ -8131,19 +8135,19 @@
> Syd/M
> Sydel/M
> Sydelle/M
-9096a14303,14304
+9096a14305,14306
> Sylas/M
> Sylvan/M
-9099a14308,14309
+9099a14310,14311
> Syman/M
> Symon/M
-9120a14331
+9120a14333
> TEirtza/M
-9121a14333
+9121a14335
> THz/M
-9135a14348
+9135a14350
> Tab/MR
-9137a14351,14357
+9137a14353,14359
> Tabb/M
> Tabbatha/M
> Tabbi/M
@@ -8151,11 +8155,11 @@
> Tabbitha/M
> Tabby/M
> Taber/M
-9138a14359
+9138a14361
> Tabina/M
-9139a14361
+9139a14363
> Tabor
-9143a14366,14372
+9143a14368,14374
> Tadd/M
> Taddeo/M
> Taddeusz/M
@@ -8163,245 +8167,245 @@
> Tadeo/M
> Tades
> Tadio/M
-9147a14377
+9147a14379
> Taffy/M
-9155a14386
+9155a14388
> Tailor/M
-9159a14391,14392
+9159a14393,14394
> Tait/M
> Taite/M
-9164a14398
+9164a14400
> Talbert/M
-9165a14400
+9165a14402
> Talia/M
-9171a14407,14408
+9171a14409,14410
> Tallia/M
> Tallie/M
-9172a14410,14412
+9172a14412,14414
> Tallou/M
> Tallulah/M
> Tally/M
-9175a14416,14419
+9175a14418,14421
> Talya/M
> Talyah/M
> Tam/M
> Tamar/M
-9176a14421,14423
+9176a14423,14425
> Tamarah/M
> Tamarra/M
> Tamas
-9181a14429
+9181a14431
> Tamiko/M
-9182a14431
+9182a14433
> Tamma/M
-9183a14433
+9183a14435
> Tammara/M
-9189a14440
+9189a14442
> Tamqrah/M
-9191a14443,14444
+9191a14445,14446
> Tan
> Tana
-9192a14446,14448
+9192a14448,14450
> Tandi/M
> Tandie/M
> Tandy/M
-9196a14453,14454
+9196a14455,14456
> Tanhya/M
> Tani/M
-9198a14457,14458
+9198a14459,14460
> Tanitansy/M
> Tann/MR
-9199a14460
+9199a14462
> Tanney/M
-9200a14462,14464
+9200a14464,14466
> Tannie/M
> Tanny/M
> Tansy/M
-9208a14473
+9208a14475
> Tarah/M
-9216a14482,14484
+9216a14484,14486
> Tarra/M
> Tarrah/M
> Tarrance/M
-9219a14488
+9219a14490
> Taryn/M
-9222a14492
+9222a14494
> Tasia/M
-9228a14499,14500
+9228a14501,14502
> Tatiana/M
> Tatiania/M
-9231a14504,14505
+9231a14506,14507
> Tawnya/M
> Tawsha/M
-9239a14514
+9239a14516
> Teador/M
-9243a14519,14522
+9243a14521,14524
> Tedd/M
> Tedda/M
> Teddi/M
> Teddie/M
-9244a14524,14529
+9244a14526,14531
> Tedi/M
> Tedie/M
> Tedman/M
> Tedmund/M
> Tedra/M
> Teena/M
-9255a14541
+9255a14543
> Temp/M
-9257a14544,14545
+9257a14546,14547
> Temple/M
> Templeton/M
-9262a14551,14555
+9262a14553,14557
> Teodoor/M
> Teodor/M
> Teodora/M
> Teodorico/M
> Teodoro/M
-9263a14557
+9263a14559
> Tera/M
-9264a14559
+9264a14561
> Terencio/M
-9265a14561
+9265a14563
> Terese/M
-9266a14563,14565
+9266a14565,14567
> Teresina
> Teresita/M
> Teressa/M
-9267a14567
+9267a14569
> Teriann/M
-9273a14574
+9273a14576
> Terrel/M
-9277a14579,14580
+9277a14581,14582
> Terrijo/M
> Terrill/M
-9280a14584,14585
+9280a14586,14587
> Terrye/M
> Tersina/M
-9281a14587
+9281a14589
> Terza/M
-9284a14591
+9284a14593
> Tessi/M
-9285a14593
+9285a14595
> Tessy/M
-9296a14605
+9296a14607
> Thacher/M
-9299a14609,14610
+9299a14611,14612
> Thaddus/M
> Thadeus/M
-9301a14613,14614
+9301a14615,14616
> Thain/M
> Thaine/M
-9304a14618
+9304a14620
> Thane/M
-9310c14624,14627
+9310c14626,14629
< Thatcher
---
> Thatch/MR
> Thatcherism
> Thaxter/M
> Thayne/M
-9311a14629,14630
+9311a14631,14632
> Theadora/M
> Thebault/M
-9312a14632,14634
+9312a14634,14636
> Theda/M
> Thedric/M
> Thedrick/M
-9313a14636
+9313a14638
> Thekla/M
-9315a14639,14641
+9315a14641,14643
> The
> Theo/M
> Theobald/M
-9316a14643
+9316a14645
> Theodor/M
-9319a14647
+9319a14649
> Theodosia/M
-9324a14653,14656
+9324a14655,14658
> Theresina/M
> Theresita/M
> Theressa/M
> Therine/M
-9333a14666,14668
+9333a14668,14670
> Thia/M
> Thibaud/M
> Thibaut/M
-9336a14672,14673
+9336a14674,14675
> Thom/M
> Thoma/SM
-9337a14675,14678
+9337a14677,14680
> Thomasa/M
> Thomasin/M
> Thomasina/M
> Thomasine/M
-9344a14686,14689
+9344a14688,14691
> Thorin/M
> Thorn
> Thorndike
> Thornie/M
-9345a14691
+9345a14693
> Thorny/M
-9347a14694,14696
+9347a14696,14698
> Thorstein/M
> Thorsten/M
> Thorvald/M
-9354d14702
+9354d14704
< Thunderbird/M
-9359a14708,14709
+9359a14710,14711
> Thurstan/M
> Thurston/M
-9367a14718
+9367a14720
> Tibold/M
-9370a14722,14724
+9370a14724,14726
> Tiebold/M
> Tiebout/M
> Tiena/M
-9372a14727,14731
+9372a14729,14733
> Tierney/M
> Tiertza/M
> Tiff/M
> Tiffani/M
> Tiffanie/M
-9373a14733,14735
+9373a14735,14737
> Tiffi/M
> Tiffie/M
> Tiffy/M
-9375a14738,14742
+9375a14740,14744
> Tilda/M
> Tildi/M
> Tildie/M
> Tildy/M
> Tiler/M
-9376a14744
+9376a14746
> Tillie/M
-9377a14746
+9377a14748
> Tilly/M
-9381a14751,14753
+9381a14753,14755
> Timi/M
> Timmi/M
> Timmie/M
-9382a14755
+9382a14757
> Timofei/M
-9384a14758,14761
+9384a14760,14763
> Timoteo/M
> Timothea/M
> Timothee/M
> Timotheus/M
-9388a14766
+9388a14768
> Tine/M
-9393a14772,14774
+9393a14774,14776
> Tiphani/M
> Tiphanie/M
> Tiphany/M
-9400a14782,14783
+9400a14784,14785
> Tirrell/M
> Tish/M
-9408c14791
+9408c14793
< Tito/M
---
> Tito/SM
-9414a14798,14804
+9414a14800,14806
> Tobe/M
> Tobey
> Tobi/M
@@ -8409,147 +8413,147 @@
> Tobias/M
> Tobie/M
> Tobin/M
-9416a14807
+9416a14809
> Tobye/M
-9420a14812,14813
+9420a14814,14815
> Toddie/M
> Toddy/M
-9422a14816,14817
+9422a14818,14819
> Toiboid/M
> Toinette/M
-9434c14829,14832
+9434c14831,14834
< Tomas
---
> Toma/SM
> Tomasina/M
> Tomasine/M
> Tomaso/M
-9435a14834,14836
+9435a14836,14838
> Tome/M
> Tomi/M
> Tomkin/M
-9436a14838
+9436a14840
> Tommi/M
-9444a14847,14848
+9444a14849,14850
> Tonie/M
> Tonnie/M
-9447a14852,14853
+9447a14854,14855
> Tonye/M
> Tootsie/M
-9451a14858,14862
+9451a14860,14864
> Tore/M
> Torey/M
> Tori/M
> Torie/M
> Torin/M
-9453a14865
+9453a14867
> Torr/MX
-9454a14867,14868
+9454a14869,14870
> Torre/SM
> Torrence/M
-9456a14871
+9456a14873
> Torrey/M
-9457a14873,14875
+9457a14875,14877
> Torrie/M
> Torrin/M
> Torry/M
-9466a14885,14887
+9466a14887,14889
> Tova/M
> Tove/M
> Town/M
-9467a14889,14890
+9467a14891,14892
> Towney/M
> Townie/M
-9468a14892
+9468a14894
> Towny/M
-9471a14896,14897
+9471a14898,14899
> Trace/M
> Tracee/M
-9483a14910
+9483a14912
> Traver/MS
-9485a14913
+9485a14915
> Travus/M
-9487a14916
+9487a14918
> Trefor/M
-9488a14918,14921
+9488a14920,14923
> Tremain/M
> Tremaine/M
> Tremayne/M
> Trenna/M
-9490a14924,14928
+9490a14926,14930
> Tresa/M
> Trescha/M
> Tressa/M
> Trev/MR
> Trevar/M
-9491a14930
+9491a14932
> Trever/M
-9504a14944
+9504a14946
> Trip/M
-9506a14947
+9506a14949
> Tripp/M
-9507a14949,14950
+9507a14951,14952
> Tris
> Trish/M
-9508a14952,14953
+9508a14954,14955
> Trista/M
> Tristam/M
-9510a14956,14959
+9510a14958,14961
> Trix/M
> Trixi/M
> Trixie/M
> Trixy/M
-9518a14968
+9518a14970
> Trstram/M
-9519a14970,14971
+9519a14972,14973
> Truda/M
> Trude/M
-9520a14973,14975
+9520a14975,14977
> Trudey/M
> Trudi/M
> Trudie/M
-9521a14977
+9521a14979
> Trueman/M
-9523a14980,14981
+9523a14982,14983
> Trula/M
> Trumaine/M
-9524a14983
+9524a14985
> Trumann/M
-9537a14997
+9537a14999
> Tuck/R
-9538a14999,15000
+9538a15001,15002
> Tuckie/M
> Tucky/M
-9546a15009,15010
+9546a15011,15012
> Tulley/M
> Tully/M
-9590a15055
+9590a15057
> Twyla/M
-9591a15057,15059
+9591a15059,15061
> Tybalt/M
> Tybi/M
> Tybie/M
-9592a15061
+9592a15063
> Tye/M
-9594a15064,15066
+9594a15066,15068
> Tymon/M
> Tymothy/M
> Tynan/M
-9596a15069
+9596a15071
> Tyne/M
-9601a15075
+9601a15077
> Tyrus/M
-9609a15084
+9609a15086
> UI/MS
-9638a15114
+9638a15116
> Udale/M
-9639a15116
+9639a15118
> Udell/M
-9642a15120
+9642a15122
> Ugo/M
-9646a15125
+9646a15127
> Ula/M
-9647a15127,15137
+9647a15129,15139
> Ulberto/M
> Ulick/M
> Ulises/M
@@ -8561,238 +8565,238 @@
> Ulrika/M
> Ulrikaumeko/M
> Ulrike/M
-9651a15142
+9651a15144
> Umberto/M
-9652a15144,15145
+9652a15146,15147
> Umeko/M
> Una/M
-9672a15166
+9672a15168
> Urbain/M
-9673a15168,15169
+9673a15170,15171
> Urbano/M
> Urbanus/M
-9675a15172
+9675a15174
> Uri/SM
-9680a15178,15180
+9680a15180,15182
> Ursala/M
> Ursola/M
> Urson/M
-9681a15182
+9681a15184
> Ursulina/M
-9687a15189
+9687a15191
> Uta/M
-9723a15226,15227
+9723a15228,15229
> Vachel/M
> Vaclav/M
-9726c15230,15233
+9726c15232,15235
< Val/M
---
> Vail/M
> Val/MY
> Valaree/M
> Valaria/M
-9727a15235
+9727a15237
> Valdemar/M
-9728a15237,15238
+9728a15239,15240
> Vale/M
> Valeda/M
-9729a15240,15241
+9729a15242,15243
> Valene/M
> Valenka/M
-9730a15243,15244
+9730a15245,15246
> Valentia/M
> Valentijn/M
-9731a15246
+9731a15248
> Valentina/M
-9734a15250
+9734a15252
> Valera
-9738a15255
+9738a15257
> Valerye/M
-9739a15257,15258
+9739a15259,15260
> Valida/M
> Valina/M
-9741a15261
+9741a15263
> Valle/M
-9743a15264,15267
+9743a15266,15269
> Valli/M
> Vallie/M
> Vally/M
> Valma/M
-9745a15270
+9745a15272
> Valry/M
-9749a15275
+9749a15277
> Vanda/M
-9754a15281,15285
+9754a15283,15287
> Vania/M
> Vanna/M
> Vanni/M
> Vannie/M
> Vanny/M
-9755a15287
+9755a15289
> Vanya/M
-9760a15293,15294
+9760a15295,15296
> Vasili/MS
> Vasily/M
-9762a15297,15298
+9762a15299,15300
> Vassili/M
> Vassily/M
-9780a15317
+9780a15319
> Velvet/M
-9784a15322
+9784a15324
> Venita/M
-9790a15329
+9790a15331
> Veradis
-9793a15333,15336
+9793a15335,15338
> Vere/M
> Verena/M
> Verene/M
> Verge/M
-9794a15338,15341
+9794a15340,15343
> Veriee/M
> Verile/M
> Verina/M
> Verine/M
-9795a15343
+9795a15345
> Verla/M
-9800c15348
+9800c15350
< Vern/M
---
> Vern/MN
-9802a15351,15353
+9802a15353,15355
> Vernen/M
> Verney/M
> Vernice/M
-9803a15355
+9803a15357
> Vernor/M
-9806a15359,15361
+9806a15361,15363
> Veronika/M
> Veronike/M
> Veronique
-9813a15369,15370
+9813a15371,15372
> Vevay/M
> Vi/M
-9818a15376
+9818a15378
> Vick/M
-9822a15381
+9822a15383
> Victoir/M
-9827a15387
+9827a15389
> Vida/M
-9828a15389,15390
+9828a15391,15392
> Vidovic/M
> Vidovik/M
-9837a15400
+9837a15402
> Viki/M
-9838a15402,15403
+9838a15404,15405
> Vikki/M
> Vikky/M
-9839a15405
+9839a15407
> Vilhelmina/M
-9845a15412,15413
+9845a15414,15415
> Vin/M
> Vina/M
-9847c15415,15417
+9847c15417,15419
< Vincent/M
---
> Vincent/MS
> Vincenty/M
> Vincenz/M
-9848a15419,15422
+9848a15421,15424
> Vinita/M
> Vinni/M
> Vinnie/M
> Vinny/M
-9850a15425,15426
+9850a15427,15428
> Violante/M
> Viole/M
-9851a15428,15430
+9851a15430,15432
> Violetta/M
> Violette/M
> Virge/M
-9853a15433,15434
+9853a15435,15436
> Virgilio/M
> Virgina/M
-9855a15437
+9855a15439
> Virginie/M
-9863a15446,15448
+9863a15448,15450
> Vita/M
> Vite/M
> Vitia/M
-9865a15451,15453
+9865a15453,15455
> Vitoria
> Vittoria/M
> Vittorio/M
-9866a15455,15456
+9866a15457,15458
> Viv/M
> Viva/M
-9868a15459,15460
+9868a15461,15462
> Vivi/MN
> Vivia/M
-9869a15462,15467
+9869a15464,15469
> Viviana/M
> Vivianna/M
> Vivianne/M
> Vivie/M
> Vivien/M
> Viviene/M
-9870a15469,15471
+9870a15471,15473
> Viviyan/M
> Vivyan/M
> Vivyanne/M
-9871a15473
+9871a15475
> Vladamir/M
-9885a15488
+9885a15490
> Von/M
-9887a15491,15493
+9887a15493,15495
> Vonni/M
> Vonnie/M
> Vonny/M
-9895a15502
+9895a15504
> Vyky/M
-9899c15506
+9899c15508
< WASP/M
---
> WASP/SM
-9917a15525
+9917a15527
> Wadsworth/M
-9921a15530,15532
+9921a15532,15534
> Wain/M
> Wainwright/M
> Wait/MR
-9922a15534
+9922a15536
> Waiter/M
-9923a15536
+9923a15538
> Wakefield
-9930a15544
+9930a15546
> Waldon/M
-9938a15553,15554
+9938a15555,15556
> Wallache/M
> Wallas/M
-9939a15556
+9939a15558
> Wallie/M
-9940a15558
+9940a15560
> Walliw/M
-9941a15560
+9941a15562
> Wally/M
-9945a15565
+9945a15567
> Walther/M
-9946a15567
+9946a15569
> Waly/M
-9948a15570,15572
+9948a15572,15574
> Wandie/M
> Wandis/M
> Waneta/M
-9949a15574
+9949a15576
> Wanids/M
-9951c15576,15577
+9951c15578,15579
< Ward
---
> Ward/N
> Warde/M
-9963d15588
+9963d15590
< Wasp
-9964a15590
+9964a15592
> Wat/MZ
-9976a15603,15610
+9976a15605,15612
> Waverley/M
> Waverly/M
> Way/M
@@ -8801,207 +8805,207 @@
> Waylen/M
> Waylin/M
> Waylon/M
-9989a15624,15625
+9989a15626,15627
> Weidar/M
> Weider/M
-9995a15632,15633
+9995a15634,15635
> Welbie/M
> Welby/M
-10006a15645,15648
+10006a15647,15650
> Wenda/M
> Wendall/M
> Wendel/M
> Wendeline/M
-10008a15651
+10008a15653
> Wendie/M
-10009a15653,15658
+10009a15655,15660
> Wendye/M
> Wenona/M
> Wenonah/M
> Werner/M
> Wernher/M
> Wes
-10015a15665,15666
+10015a15667,15668
> Westbrook/M
> Westbrooke/M
-10017a15669,15670
+10017a15671,15672
> Westleigh/M
> Westley/M
-10021a15675
+10021a15677
> Weylin/M
-10031a15686
+10031a15688
> Whit
-10032a15688
+10032a15690
> Whitby/M
-10043a15700
+10043a15702
> Whittaker/M
-10044a15702
+10044a15704
> Wiatt/M
-10057a15716
+10057a15718
> Wilburt/M
-10060a15720,15723
+10060a15722,15725
> Wilden/M
> Wildon/M
> Wileen/M
> Wilek/M
-10065a15729
+10065a15731
> Wilfrid/M
-10067a15732,15733
+10067a15734,15735
> Wilhelmine
> Wilie/M
-10073a15740
+10073a15742
> Willabella/M
-10074a15742
+10074a15744
> Willamina/M
-10075a15744,15745
+10075a15746,15747
> Willdon/M
> Willem/M
-10076a15747,15750
+10076a15749,15752
> Willetta/M
> Willette/M
> Willey/M
> Willi/MS
-10080a15755
+10080a15757
> Willow/M
-10081a15757
+10081a15759
> Willyt/M
-10082a15759
+10082a15761
> Wilmar/M
-10083a15761
+10083a15763
> Wilmette/M
-10084a15763,15765
+10084a15765,15767
> Wilona/M
> Wilone/M
> Wilow/M
-10086a15768
+10086a15770
> Wilt/M
-10089a15772
+10089a15774
> Win/M
-10093a15777
+10093a15779
> Windham/M
-10097a15782
+10097a15784
> Windy/M
-10098a15784
+10098a15786
> Winfield/M
-10100a15787,15788
+10100a15789,15790
> Wini/M
> Winifield/M
-10102a15791,15794
+10102a15793,15796
> Winn/M
> Winna/M
> Winnah/M
> Winne/M
-10103a15796
+10103a15798
> Winni/M
-10104a15798
+10104a15800
> Winnifred/M
-10105a15800,15803
+10105a15802,15805
> Winny/M
> Winona/M
> Winonah/M
> Winslow/M
-10113a15812
+10113a15814
> Wit/M
-10115a15815,15816
+10115a15817,15818
> Wittie/M
> Witty/M
-10123a15825,15826
+10123a15827,15828
> Wolfie/M
> Wolfy/M
-10133a15837,15838
+10133a15839,15840
> Woodie/M
> Woodman
-10136a15842
+10136a15844
> Woody/M
-10144a15851
+10144a15853
> Worden/M
-10147a15855,15857
+10147a15857,15859
> Worth
> Worthington/M
> Worthy/M
-10153a15864
+10153a15866
> Wrennie/M
-10159a15871
+10159a15873
> Wyatan/M
-10163c15875
+10163c15877
< Wyeth
---
> Wye/H
-10164a15877,15879
+10164a15879,15881
> Wylma/M
> Wyn/M
> Wyndham/M
-10165a15881,15883
+10165a15883,15885
> Wynne/M
> Wynnie/M
> Wynny/M
-10177a15896
+10177a15898
> Xaviera/M
-10178a15898
+10178a15900
> Xena/M
-10181a15902
+10181a15904
> Xenos
-10183a15905
+10183a15907
> Xever/M
-10188a15911
+10188a15913
> Ximenez/M
-10193a15917,15919
+10193a15919,15921
> Xylia/M
> Xylina/M
> Xymenes/M
-10209a15936
+10209a15938
> Yalonda/M
-10215a15943,15946
+10215a15945,15948
> Yanaton/M
> Yance/M
> Yancey/M
> Yancy/M
-10223a15955,15956
+10223a15957,15958
> Yard/M
> Yardley/M
-10225a15959,15960
+10225a15961,15962
> Yasmeen/M
> Yasmin/M
-10230a15966,15967
+10230a15968,15969
> Yehudi/M
> Yehudit/M
-10231a15969
+10231a15971
> Yelena/M
-10241a15980,15983
+10241a15982,15985
> Yetta/M
> Yettie/M
> Yetty/M
> Yevette/M
-10245a15988,15989
+10245a15990,15991
> Ynes/M
> Ynez/M
-10250a15995,15997
+10250a15997,15999
> Yolande/M
> Yolane/M
> Yolanthe/M
-10253c16000,16003
+10253c16002,16005
< York/M
---
> Yorgo/MS
> York/MR
> Yorke/M
> Yorker/M
-10258a16009,16010
+10258a16011,16012
> Yoshi/M
> Yoshiko/M
-10262a16015
+10262a16017
> Yovonnda/M
-10264a16018
+10264a16020
> Ysabel/M
-10271a16026
+10271a16028
> Yul/M
-10273a16029
+10273a16031
> Yulma/M
-10276a16033
+10276a16035
> Yurik/M
-10278a16036
+10278a16038
> Yvon/M
-10280c16038,16043
+10280c16040,16045
< Z/SMNXT
---
> Yvor/M
@@ -9010,24 +9014,24 @@
> Zaccaria/M
> Zach
> Zacharia/SM
-10281a16045
+10281a16047
> Zacharie/M
-10282a16047
+10282a16049
> Zacherie/M
-10283a16049,16050
+10283a16051,16052
> Zack/M
> Zackariah/M
-10284a16052
+10284a16054
> Zahara/M
-10286a16055
+10286a16057
> Zak/M
-10292a16062
+10292a16064
> Zandra/M
-10293a16064
+10293a16066
> Zaneta/M
-10300a16072
+10300a16074
> Zarah/M
-10301a16074,16080
+10301a16076,16082
> Zared/M
> Zaria/M
> Zarla/M
@@ -9035,31 +9039,31 @@
> Zealand/M
> Zeb/M
> Zebadiah/M
-10302a16082,16083
+10302a16084,16085
> Zebulen/M
> Zebulon/M
-10303a16085
+10303a16087
> Zed/M
-10307a16090
+10307a16092
> Zelda/M
-10310a16094
+10310a16096
> Zena/M
-10311a16096
+10311a16098
> Zenia/M
-10315a16101
+10315a16103
> Zerk/M
-10321a16108
+10321a16110
> Zia/M
-10325a16113
+10325a16115
> Zilvia/M
-10333a16122,16123
+10333a16124,16125
> Zita/M
> Zitella/M
-10336a16127
+10336a16129
> Zollie/M
-10337a16129
+10337a16131
> Zolly/M
-10339a16132,16139
+10339a16134,16141
> Zonda/M
> Zondra/M
> Zonnya/M
@@ -9068,544 +9072,546 @@
> Zorana/M
> Zorina/M
> Zorine/M
-10346a16147
+10346a16149
> Zsazsa/M
-10350a16152
+10350a16154
> Zulema/M
-10354a16157
+10354a16159
> Zuzana/M
-10460a16264
+10460a16266
> abridgement/MS
-10488a16293,16294
+10488a16295,16296
> absorbance/S
> absorbancy/M
-10665a16472
+10665a16474
> acknowledgement/MS
-10824c16631
+10824c16633
< admin/S
---
> admin/MS
-10936a16744
+10936a16746
> advocator/SM
-11045c16853
+11045c16855
< afterward
---
> afterward/S
-11393d17200
+11393d17202
< altho
-11579a17387
+11579a17389
> analyses
-11631c17439
+11631c17441
< anecdotal
---
> anecdotal/Y
-11804c17612
+11804c17614
< anthropomorphizing
---
> anthropomorphize/DSG
-11983c17791
+11983c17793
< app/S
---
> app/MS
-12137a17946
+12137a17948
> archaeology/M
-12152c17961
+12152c17963
< archeological
---
> archeological/Y
-12432c18241
+12432c18243
< assignees
---
> assignee/MS
-12685c18494
+12685c18496
< auteur
---
> auteur/MS
-12713a18523
+12713a18525
> autocomplete/S
-12754a18565
+12754a18567
> avant-garde
-12827d18637
+12827d18639
< awol
-12829a18640
+12829a18642
> axe/M
-13864a19676
+13864a19678
> biodiesel/M
-14210d20021
+14210d20023
< blueing's
-14434a20246
+14434a20248
> bookselling
-14841c20653
+14841c20655
< broadcast/AMGS
---
> broadcast/AMGSD
-15039,15040c20851
+15039,15040c20853
< bullshitter's
< bullshitter/S!
---
> bullshitter/SM!
-15230d21040
+15230d21042
< byelaw/SM
-15383d21192
+15383d21194
< callisthenics/M
-15460a21270,21272
+15460a21272,21274
> cancelled/U
> canceller/M
> cancelling
-15559a21372
+15559a21374
> capita
-15629,15630d21441
+15629,15630d21443
< carburetter/SM
< carburettor/SM
-15701a21513
+15701a21515
> carnitas
-15788d21599
+15788d21601
< cashpoint/S
-15797d21607
+15797d21609
< cassino/M
-15832a21643
+15832a21645
> catalyses
-15940d21750
+15940d21752
< caviare/M
-16372c22182
+16372c22184
< chickenshit/S!
---
> chickenshit/SM!
-16404c22214
+16404c22216
< children
---
> children/M
-16488d22297
+16488d22299
< chlorophyl/M
-16629,16630c22438
+16629,16630c22440
< cider's
< cider/S
---
> cider/MS
-17072d22879
+17072d22881
< cocain/M
-17102,17103c22909
+17102,17103c22911
< cocksucker's
< cocksucker/S!
---
> cocksucker/SM!
-17755c23561
+17755c23563
< confer/S
---
> confer/SB
-17800a23607
+17800a23609
> conformant
-18151d23957
+18151d23959
< convenor/S
-18206c24012
+18206c24014
< cookie/M
---
> cookie/SM
-18467a24274
+18467a24276
> could've
-19035a24843
+19035a24845
> cul-de-sac
-19246c25054
+19246c25056
< cysteine
---
> cysteine/M
-20196,20197c26004,26005
+20196,20197c26006,26007
< dialog/SM
< dialogue/SM
---
> dialog/SMGD
> dialogue/SMRGD
-20481a26290
+20481a26292
> disclose/DSG
-20830c26639
+20830c26641
< dogie/M
---
> dogie/SM
-20895a26705
+20895a26707
> donator/MS
-21820a27631
+21820a27633
> elicitor/MS
-22071a27883
+22071a27885
> encyclopaedia
-22556a28369
+22556a28371
> estoppel
-22638c28451
+22638c28453
< euthanize
---
> euthanize/DSG
-22719a28533
+22719a28535
> exabyte/MS
-22947a28762
+22947a28764
> experimentalism
-23207,23208d29021
+23207,23208d29023
< faecal
< faeces/M
-23215c29028
+23215c29030
< faggoting's
---
> faggot/SMG
-23701a29515
+23701a29517
> filesystem/MS
-24155c29969
+24155c29971
< fluidized
---
> fluidize/DSG
-24216a30031
+24216a30033
> foci
-24736d30550
+24736d30552
< frier/M
-24855,24856c30669,30670
+24855,24856c30671,30672
< fucker/M!
< fuckhead/S!
---
> fucker/SM!
> fuckhead/SM!
-24953d30766
+24953d30768
< furore/MS
-25125c30938
+25125c30940
< gaolbird/S
---
> gaolbirds
-25180d30992
+25180d30994
< gasolene/M
-25190a31003
+25190a31005
> gastroenterologist/M
-25262c31075
+25262c31077
< geezer/M
---
> geezer/MS
-25327c31140
+25327c31142
< genomic
---
> genomic/S
-25462a31276
+25462a31278
> gigabit/MS
-25464a31279,31281
+25464a31281,31283
> gigajoule/MS
> gigapixel/MS
> gigawatt/MS
-25560d31376
+25560d31378
< glamourize/DSG
-25674c31490
+25674c31492
< glycerine's
---
> glycerine/M
-25905c31721
+25905c31723
< gram/MS
---
> gram/KMS
-25909d31724
+25909d31726
< gramme/SM
-26063c31878,31879
+26063c31880,31881
< greybeard
---
> grey/MDRTGSP
> greybeard/SM
-26066c31882
+26066c31884
< greyness
---
> greyness/M
-26246,26247d32061
+26246,26247d32063
< guerilla's
< guerillas
-26432,26436d32245
+26432,26436d32247
< haemoglobin's
< haemophilia/M
< haemorrhage/DSMG
< haemorrhoid/S
< haemorrhoids/M
-27167c32976
+27167c32978
< hexane
---
> hexane/SM
-27273a33083
+27273a33085
> hippopotami
-27875d33684
+27875d33686
< hyaena/SM
-28017c33826
+28017c33828
< iPod/M
---
> iPod/MS
-28105a33915
+28105a33917
> idolator/SM
-28513c34323
+28513c34325
< inbound
---
> inbound/s
-28650a34461
+28650a34463
> indices
-28812d34622
+28812d34624
< inflexion/SM
-29216a35027
+29216a35029
> intern/GDL
-29266a35078
+29266a35080
> interruptible/U
-29272a35085,35088
+29272a35087,35090
> intersex
> intersexual/MS
> intersexualism
> intersexuality
-29724c35540
+29724c35542
< jewellery's
---
> jewellery/M
-29870a35687
+29870a35689
> judgement/MS
-30066c35883
+30066c35885
< kiddie/M
---
> kiddie/SM
-30262,30263c36079
+30262,30263c36081
< kraut's
< kraut/S!
---
> kraut/MS!
-30665a36482
+30665a36484
> lector/MS
-31031c36848
+31031c36850
< linguini's
---
> linguini/M
-31151,31152c36968
+31151,31152c36970
< liver's
< liver/S
---
> liver/MS
-32230c38046
+32230c38048
< meanie/M
---
> meanie/MS
-32317,32318c38133
+32317,32318c38135
< megadeath/M
< megadeaths
---
> megadeath/SM
-32320c38135
+32320c38137
< megajoules
---
> megajoule/SM
-32329c38144
+32329c38146
< megapixel/S
---
> megapixel/MS
-32708a38524
+32708a38526
> might've
-32717a38534
+32717a38536
> migrator/SM
-32777d38593
+32760a38580
+> millennia
+32777d38596
< millionnaire/M
-32934a38751
+32934a38754
> miscommunication/S
-32991a38809
+32991a38812
> misjudgement/MS
-33784a39603
+33784a39606
> must've
-33963c39782
+33963c39785
< native/MS
---
> native/MSY
-34169,34171c39988,39989
+34169,34171c39991,39992
< neurone/S
< neurophysiology
< neuroscience
---
> neurophysiology/M
> neuroscience/MS
-34275c40093
+34275c40096
< nightie/M
---
> nightie/SM
-35104a40923
+35104a40926
> octopi
-35219d41037
+35219d41040
< oleomargarin/M
-35226a41045
+35226a41048
> oligo
-35913c41732
+35913c41735
< oversize/D
---
> oversize
-36056,36059d41874
+36056,36059d41877
< paederast/S
< paediatrician's
< paediatricians
< paediatrics/M
-36291a42107
+36291a42110
> paralyses
-36403d42218
+36403d42221
< parrakeet/MS
-36449d42263
+36449d42266
< partizan/SM
-37093a42908
+37093a42911
> petabyte/MS
-37102c42917
+37102c42920
< petitioner/M
---
> petitioner/MS
-37264a43080
+37264a43083
> phosphorylate/DSGN
-37316d43131
+37316d43134
< phrenetic
-37796a43612
+37796a43615
> plugin/MS
-37987c43803
+37987c43806
< polypeptide/S
---
> polypeptide/MS
-38291d44106
+38291d44109
< practise's
-38451a44267
+38451a44270
> prejudgement/MS
-38805a44622
+38805a44625
> profiler/SM
-38835a44653
+38835a44656
> programmatically
-38891a44710,44711
+38891a44713,44714
> pronate/DSGN
> pronator/MS
-38951c44771
+38951c44774
< proprietorship/M
---
> proprietorship/MS
-39039a44860
+39039a44863
> provender/M
-39564a45386
+39564a45389
> quinoa
-40036a45859
+40036a45862
> recency
-40140a45964
+40140a45967
> recurse/DGSV
-40141a45966
+40141a45969
> recuse/DGS
-40208a46034
+40208a46037
> refactor/SMDG
-40244d46069
+40244d46072
< reflexion/SM
-40659d46483
+40659d46486
< resizing
-40829c46653
+40829c46656
< reverie/M
---
> reverie/MS
-41415a47240
+41415a47243
> sabre/MS
-41914c47739
+41914c47742
< schnaps's
---
> schnaps/M
-41949c47774
+41949c47777
< schrod's
---
> schrod/SM
-41998a47824
+41998a47827
> scot-free
-42883,42885c48709
+42883,42885c48712
< shit's
< shit/S!
< shite/S!
---
> shit/MS!
-42887,42888c48711,48712
+42887,42888c48714,48715
< shithead/S!
< shitload/!
---
> shithead/MS!
> shitload/MS!
-42891c48715
+42891c48718
< shitty/RT!
---
> shitty/TR!
-42976a48801
+42976a48804
> should've
-43008c48833
+43008c48836
< showtime
---
> showtime/MS
-43328c49153
+43328c49156
< size/MGBDRS
---
> size/AMGBDRS
-43724,43726c49549
+43724,43726c49552
< smoulder's
< smouldered
< smoulders
---
> smoulder/GSMD
-44062c49885
+44062c49888
< sonofabitch
---
> sonofabitch/!
-44346a50170
+44346a50173
> spelled
-44348a50173
+44348a50176
> spelt
-44371a50197
+44371a50200
> spick/S!
-44383c50209
+44383c50212
< spik/S
---
> spik/S!
-46106a51933
+46106a51936
> syllabi
-46160c51987
+46160c51990
< synch/GMD
---
> synch/GMDS
-46167d51993
+46167d51996
< synchs
-46203,46204c52029,52030
+46203,46204c52032,52033
< sysadmin/S
< sysop/S
---
> sysadmin/MS
> sysop/MS
-46752a52579
+46752a52582
> terabit/MS
-46753a52581,52582
+46753a52584,52585
> terahertz/M
> terapixel/MS
-46817a52647
+46817a52650
> testcase/MS
-46831a52662
+46831a52665
> testsuite/MS
-46925a52757
+46925a52760
> theremin/MS
-47455c53287
+47455c53290
< toolbar
---
> toolbar/MS
-47755a53588
+47755a53591
> transfect/DSMG
-47774a53608,53609
+47774a53611,53612
> transgenderism
> transgene/MS
-47951c53786
+47951c53789
< triage/M
---
> triage/MG
-48869a54705
+48869a54708
> unlikeable
-49211c55047
+49211c55050
< vagina/M
---
> vagina/MS
-49368,49369c55204
+49368,49369c55207
< velour's
< velours's
---
> velour/MS
-49478a55314
+49478a55317
> vertices
-50148a55985
+50148a55988
> weaponize/DSG
-50260,50261d56096
+50260,50261d56099
< werwolf/M
< werwolves
-50728c56563
+50728c56566
< women
---
> women/M
-50794c56629
+50794c56632
< wop/S!
---
> wop/MS!
diff --git a/extensions/spellcheck/locales/en-US/hunspell/en-US.dic b/extensions/spellcheck/locales/en-US/hunspell/en-US.dic
index df67e5ba361..9f23b3c7cf1 100644
--- a/extensions/spellcheck/locales/en-US/hunspell/en-US.dic
+++ b/extensions/spellcheck/locales/en-US/hunspell/en-US.dic
@@ -1,4 +1,4 @@
-57451
+57454
0/nm
0th/pt
1/n1
@@ -3828,11 +3828,13 @@ DOS/M
DOT
DP/SM
DPT
+DRM
DST
DTP
DUI
DVD
DVDs
+DVR/S
DWI
Dacca/M
Dacey/M
@@ -38880,6 +38882,7 @@ milky/RTP
mill/MDRSZGJ
millage/M
millenarian
+millennia
millennial
millennium/SM
millepede/MS
diff --git a/extensions/spellcheck/src/mozInlineSpellWordUtil.cpp b/extensions/spellcheck/src/mozInlineSpellWordUtil.cpp
index 46cdc1f3692..80974ec1905 100644
--- a/extensions/spellcheck/src/mozInlineSpellWordUtil.cpp
+++ b/extensions/spellcheck/src/mozInlineSpellWordUtil.cpp
@@ -44,7 +44,8 @@ inline bool IsIgnorableCharacter(PRUnichar ch)
inline bool IsConditionalPunctuation(PRUnichar ch)
{
return (ch == '\'' ||
- ch == 0x2019); // RIGHT SINGLE QUOTATION MARK
+ ch == 0x2019 || // RIGHT SINGLE QUOTATION MARK
+ ch == 0x00B7); // MIDDLE DOT
}
// mozInlineSpellWordUtil::Init
diff --git a/gfx/2d/PathD2D.cpp b/gfx/2d/PathD2D.cpp
index a6bd78e1736..d3aa5af479a 100644
--- a/gfx/2d/PathD2D.cpp
+++ b/gfx/2d/PathD2D.cpp
@@ -345,7 +345,7 @@ PathD2D::TransformedCopyToBuilder(const Matrix &aTransform, FillRule aFillRule)
sink);
}
- RefPtr pathBuilder = new PathBuilderD2D(sink, path, mFillRule);
+ RefPtr pathBuilder = new PathBuilderD2D(sink, path, aFillRule);
pathBuilder->mCurrentPoint = aTransform * mEndPoint;
diff --git a/gfx/layers/composite/APZCTreeManager.cpp b/gfx/layers/composite/APZCTreeManager.cpp
index dd802972683..0dbbfa64759 100644
--- a/gfx/layers/composite/APZCTreeManager.cpp
+++ b/gfx/layers/composite/APZCTreeManager.cpp
@@ -107,6 +107,8 @@ APZCTreeManager::UpdatePanZoomControllerTree(CompositorParent* aCompositor,
bool aIsFirstPaint, uint64_t aFirstPaintLayersId,
nsTArray< nsRefPtr >* aApzcsToDestroy)
{
+ mTreeLock.AssertCurrentThreadOwns();
+
ContainerLayer* container = aLayer->AsContainerLayer();
AsyncPanZoomController* apzc = nullptr;
if (container) {
@@ -315,7 +317,7 @@ APZCTreeManager::ReceiveInputEvent(const InputData& aEvent,
return result;
}
-AsyncPanZoomController*
+already_AddRefed
APZCTreeManager::GetTouchInputBlockAPZC(const WidgetTouchEvent& aEvent,
ScreenPoint aPoint)
{
@@ -324,7 +326,7 @@ APZCTreeManager::GetTouchInputBlockAPZC(const WidgetTouchEvent& aEvent,
// Reset the cached apz transform
mCachedTransformToApzcForInputBlock = transformToApzc;
if (!apzc) {
- return nullptr;
+ return apzc.forget();
}
for (size_t i = 1; i < aEvent.touches.Length(); i++) {
nsIntPoint point = aEvent.touches[i]->mRefPoint;
@@ -341,7 +343,7 @@ APZCTreeManager::GetTouchInputBlockAPZC(const WidgetTouchEvent& aEvent,
// Cache apz transform so it can be used for future events in this block.
GetInputTransforms(apzc, mCachedTransformToApzcForInputBlock, transformToGecko);
}
- return apzc.get();
+ return apzc.forget();
}
nsEventStatus
@@ -349,6 +351,8 @@ APZCTreeManager::ProcessTouchEvent(const WidgetTouchEvent& aEvent,
ScrollableLayerGuid* aOutTargetGuid,
WidgetTouchEvent* aOutEvent)
{
+ MOZ_ASSERT(NS_IsMainThread());
+
nsEventStatus ret = nsEventStatus_eIgnore;
if (!aEvent.touches.Length()) {
return ret;
@@ -421,6 +425,8 @@ APZCTreeManager::ProcessMouseEvent(const WidgetMouseEvent& aEvent,
ScrollableLayerGuid* aOutTargetGuid,
WidgetMouseEvent* aOutEvent)
{
+ MOZ_ASSERT(NS_IsMainThread());
+
nsRefPtr apzc = GetTargetAPZC(ScreenPoint(aEvent.refPoint.x, aEvent.refPoint.y));
if (!apzc) {
return nsEventStatus_eIgnore;
@@ -441,6 +447,8 @@ APZCTreeManager::ProcessEvent(const WidgetInputEvent& aEvent,
ScrollableLayerGuid* aOutTargetGuid,
WidgetInputEvent* aOutEvent)
{
+ MOZ_ASSERT(NS_IsMainThread());
+
// Transform the refPoint
nsRefPtr apzc = GetTargetAPZC(ScreenPoint(aEvent.refPoint.x, aEvent.refPoint.y));
if (!apzc) {
@@ -645,6 +653,8 @@ APZCTreeManager::GetTargetAPZC(const ScreenPoint& aPoint)
AsyncPanZoomController*
APZCTreeManager::FindTargetAPZC(AsyncPanZoomController* aApzc, const ScrollableLayerGuid& aGuid) {
+ mTreeLock.AssertCurrentThreadOwns();
+
// This walks the tree in depth-first, reverse order, so that it encounters
// APZCs front-to-back on the screen.
for (AsyncPanZoomController* child = aApzc->GetLastChild(); child; child = child->GetPrevSibling()) {
@@ -663,6 +673,8 @@ APZCTreeManager::FindTargetAPZC(AsyncPanZoomController* aApzc, const ScrollableL
AsyncPanZoomController*
APZCTreeManager::GetAPZCAtPoint(AsyncPanZoomController* aApzc, const gfxPoint& aHitTestPoint)
{
+ mTreeLock.AssertCurrentThreadOwns();
+
// The comments below assume there is a chain of layers L..R with L and P having APZC instances as
// explained in the comment on GetInputTransforms. This function will recurse with aApzc at L and P, and the
// comments explain what values are stored in the variables at these two levels. All the comments
@@ -796,6 +808,8 @@ void
APZCTreeManager::GetInputTransforms(AsyncPanZoomController *aApzc, gfx3DMatrix& aTransformToApzcOut,
gfx3DMatrix& aTransformToGeckoOut)
{
+ MonitorAutoLock lock(mTreeLock);
+
// The comments below assume there is a chain of layers L..R with L and P having APZC instances as
// explained in the comment above. This function is called with aApzc at L, and the loop
// below performs one iteration, where parent is at P. The comments explain what values are stored
@@ -835,9 +849,12 @@ APZCTreeManager::GetInputTransforms(AsyncPanZoomController *aApzc, gfx3DMatrix&
}
}
-AsyncPanZoomController*
+already_AddRefed
APZCTreeManager::CommonAncestor(AsyncPanZoomController* aApzc1, AsyncPanZoomController* aApzc2)
{
+ MonitorAutoLock lock(mTreeLock);
+ nsRefPtr ancestor;
+
// If either aApzc1 or aApzc2 is null, min(depth1, depth2) will be 0 and this function
// will return null.
@@ -866,7 +883,8 @@ APZCTreeManager::CommonAncestor(AsyncPanZoomController* aApzc1, AsyncPanZoomCont
// either APZC, and return the the first common ancestor encountered.
while (true) {
if (aApzc1 == aApzc2) {
- return aApzc1;
+ ancestor = aApzc1;
+ break;
}
if (depth1 <= 0) {
break;
@@ -874,16 +892,18 @@ APZCTreeManager::CommonAncestor(AsyncPanZoomController* aApzc1, AsyncPanZoomCont
aApzc1 = aApzc1->GetParent();
aApzc2 = aApzc2->GetParent();
}
- return nullptr;
+ return ancestor.forget();
}
-AsyncPanZoomController*
+already_AddRefed
APZCTreeManager::RootAPZCForLayersId(AsyncPanZoomController* aApzc)
{
- while (aApzc && !aApzc->IsRootForLayersId()) {
- aApzc = aApzc->GetParent();
+ MonitorAutoLock lock(mTreeLock);
+ nsRefPtr apzc = aApzc;
+ while (apzc && !apzc->IsRootForLayersId()) {
+ apzc = apzc->GetParent();
}
- return aApzc;
+ return apzc.forget();
}
}
diff --git a/gfx/layers/composite/APZCTreeManager.h b/gfx/layers/composite/APZCTreeManager.h
index c28a8272628..9b21b50b05d 100644
--- a/gfx/layers/composite/APZCTreeManager.h
+++ b/gfx/layers/composite/APZCTreeManager.h
@@ -310,9 +310,9 @@ private:
/* Helpers */
AsyncPanZoomController* FindTargetAPZC(AsyncPanZoomController* aApzc, const ScrollableLayerGuid& aGuid);
AsyncPanZoomController* GetAPZCAtPoint(AsyncPanZoomController* aApzc, const gfxPoint& aHitTestPoint);
- AsyncPanZoomController* CommonAncestor(AsyncPanZoomController* aApzc1, AsyncPanZoomController* aApzc2);
- AsyncPanZoomController* RootAPZCForLayersId(AsyncPanZoomController* aApzc);
- AsyncPanZoomController* GetTouchInputBlockAPZC(const WidgetTouchEvent& aEvent, ScreenPoint aPoint);
+ already_AddRefed CommonAncestor(AsyncPanZoomController* aApzc1, AsyncPanZoomController* aApzc2);
+ already_AddRefed RootAPZCForLayersId(AsyncPanZoomController* aApzc);
+ already_AddRefed GetTouchInputBlockAPZC(const WidgetTouchEvent& aEvent, ScreenPoint aPoint);
nsEventStatus ProcessTouchEvent(const WidgetTouchEvent& touchEvent, ScrollableLayerGuid* aOutTargetGuid, WidgetTouchEvent* aOutEvent);
nsEventStatus ProcessMouseEvent(const WidgetMouseEvent& mouseEvent, ScrollableLayerGuid* aOutTargetGuid, WidgetMouseEvent* aOutEvent);
nsEventStatus ProcessEvent(const WidgetInputEvent& inputEvent, ScrollableLayerGuid* aOutTargetGuid, WidgetInputEvent* aOutEvent);
diff --git a/gfx/tests/crashtests/624198.xhtml b/gfx/tests/crashtests/624198.xhtml
new file mode 100644
index 00000000000..67d207b7a17
--- /dev/null
+++ b/gfx/tests/crashtests/624198.xhtml
@@ -0,0 +1 @@
+
\ No newline at end of file
diff --git a/gfx/tests/crashtests/crashtests.list b/gfx/tests/crashtests/crashtests.list
index 258750e3f26..437f697c6ca 100644
--- a/gfx/tests/crashtests/crashtests.list
+++ b/gfx/tests/crashtests/crashtests.list
@@ -85,6 +85,7 @@ load 580233-1.html
load 580719-1.html
load 594654-1.xhtml
load 595727-1.html
+load 624198.xhtml
load 633453-1.html
load 633322-1.html
load 665218.html
diff --git a/gfx/thebes/gfxFont.cpp b/gfx/thebes/gfxFont.cpp
index f9cedc2daee..21843d00398 100644
--- a/gfx/thebes/gfxFont.cpp
+++ b/gfx/thebes/gfxFont.cpp
@@ -3344,11 +3344,14 @@ gfxFont::ShapeTextWithoutWordCache(gfxContext *aContext,
}
// fragment was terminated by an invalid char: skip it,
+ // unless it's a control char that we want to show as a hexbox,
// but record where TAB or NEWLINE occur
if (ch == '\t') {
aTextRun->SetIsTab(aOffset + i);
} else if (ch == '\n') {
aTextRun->SetIsNewline(aOffset + i);
+ } else if ((ch & 0x7f) < 0x20 || ch == 0x7f) {
+ aTextRun->SetMissingGlyph(aOffset + i, ch, this);
}
fragStart = i + 1;
}
@@ -3485,11 +3488,14 @@ gfxFont::SplitAndInitTextRun(gfxContext *aContext,
"how did we get here except via an invalid char?");
// word was terminated by an invalid char: skip it,
+ // unless it's a control char that we want to show as a hexbox,
// but record where TAB or NEWLINE occur
if (ch == '\t') {
aTextRun->SetIsTab(aRunStart + i);
} else if (ch == '\n') {
aTextRun->SetIsNewline(aRunStart + i);
+ } else if ((ch & 0x7f) < 0x20 || ch == 0x7f) {
+ aTextRun->SetMissingGlyph(aRunStart + i, ch, this);
}
hash = 0;
diff --git a/js/public/Value.h b/js/public/Value.h
index 7a772bcfba1..77b91dbb638 100644
--- a/js/public/Value.h
+++ b/js/public/Value.h
@@ -1602,33 +1602,51 @@ class MutableValueOperations : public UnbarrieredMutableValueOperations
* type-querying, value-extracting, and mutating operations.
*/
template <>
-class HeapBase : public UnbarrieredMutableValueOperations >
+class HeapBase : public ValueOperations >
{
typedef JS::Heap Outer;
friend class ValueOperations;
- friend class UnbarrieredMutableValueOperations;
const JS::Value * extract() const { return static_cast(this)->address(); }
- JS::Value * extractMutable() { return static_cast(this)->unsafeGet(); }
- /*
- * Setters that potentially change the value to a GC thing from a non-GC
- * thing must call JS::Heap::set() to trigger the post barrier.
- *
- * Changing from a GC thing to a non-GC thing value will leave the heap
- * value in the store buffer, but it will be ingored so this is not a
- * problem.
- */
void setBarriered(const JS::Value &v) {
static_cast *>(this)->set(v);
}
public:
+ void setNull() { setBarriered(JS::NullValue()); }
+ void setUndefined() { setBarriered(JS::UndefinedValue()); }
+ void setInt32(int32_t i) { setBarriered(JS::Int32Value(i)); }
+ void setDouble(double d) { setBarriered(JS::DoubleValue(d)); }
+ void setNaN() { setDouble(JS::GenericNaN()); }
+ void setBoolean(bool b) { setBarriered(JS::BooleanValue(b)); }
+ void setMagic(JSWhyMagic why) { setBarriered(JS::MagicValue(why)); }
void setString(JSString *str) { setBarriered(JS::StringValue(str)); }
void setString(const JS::Anchor &str) { setBarriered(JS::StringValue(str.get())); }
void setObject(JSObject &obj) { setBarriered(JS::ObjectValue(obj)); }
+ bool setNumber(uint32_t ui) {
+ if (ui > JSVAL_INT_MAX) {
+ setDouble((double)ui);
+ return false;
+ } else {
+ setInt32((int32_t)ui);
+ return true;
+ }
+ }
+
+ bool setNumber(double d) {
+ int32_t i;
+ if (mozilla::DoubleIsInt32(d, &i)) {
+ setInt32(i);
+ return true;
+ }
+
+ setDouble(d);
+ return false;
+ }
+
void setObjectOrNull(JSObject *arg) {
if (arg)
setObject(*arg);
diff --git a/js/src/assembler/assembler/MacroAssemblerX86Common.cpp b/js/src/assembler/assembler/MacroAssemblerX86Common.cpp
index 15e98762ce0..9965a9ff758 100644
--- a/js/src/assembler/assembler/MacroAssemblerX86Common.cpp
+++ b/js/src/assembler/assembler/MacroAssemblerX86Common.cpp
@@ -16,6 +16,8 @@ MacroAssemblerX86Common::SSECheckState MacroAssemblerX86Common::s_sseCheckState
#ifdef DEBUG
bool MacroAssemblerX86Common::s_floatingPointDisabled = false;
+bool MacroAssemblerX86Common::s_SSE3Disabled = false;
+bool MacroAssemblerX86Common::s_SSE4Disabled = false;
#endif
#endif /* WTF_CPU_X86 || WTF_CPU_X86_64 */
diff --git a/js/src/assembler/assembler/MacroAssemblerX86Common.h b/js/src/assembler/assembler/MacroAssemblerX86Common.h
index 39505bfcf87..a58b0777f8f 100644
--- a/js/src/assembler/assembler/MacroAssemblerX86Common.h
+++ b/js/src/assembler/assembler/MacroAssemblerX86Common.h
@@ -1403,6 +1403,13 @@ private:
s_sseCheckState = HasSSE;
else
s_sseCheckState = NoSSE;
+
+#ifdef DEBUG
+ if (s_sseCheckState >= HasSSE4_1 && s_SSE4Disabled)
+ s_sseCheckState = HasSSE3;
+ if (s_sseCheckState >= HasSSE3 && s_SSE3Disabled)
+ s_sseCheckState = HasSSE2;
+#endif
}
#if WTF_CPU_X86
@@ -1505,11 +1512,19 @@ private:
#ifdef DEBUG
static bool s_floatingPointDisabled;
+ static bool s_SSE3Disabled;
+ static bool s_SSE4Disabled;
public:
static void SetFloatingPointDisabled() {
s_floatingPointDisabled = true;
}
+ static void SetSSE3Disabled() {
+ s_SSE3Disabled = true;
+ }
+ static void SetSSE4Disabled() {
+ s_SSE4Disabled = true;
+ }
#endif
};
diff --git a/js/src/builtin/TypedObject.cpp b/js/src/builtin/TypedObject.cpp
index 287272aa754..a8e4cdcef2c 100644
--- a/js/src/builtin/TypedObject.cpp
+++ b/js/src/builtin/TypedObject.cpp
@@ -529,6 +529,7 @@ const JSPropertySpec ArrayType::typedObjectProperties[] = {
const JSFunctionSpec ArrayType::typedObjectMethods[] = {
JS_FN("subarray", ArrayType::subarray, 2, 0),
{"forEach", {nullptr, nullptr}, 1, 0, "ArrayForEach"},
+ {"redimension", {nullptr, nullptr}, 1, 0, "TypedArrayRedimension"},
JS_FS_END
};
diff --git a/js/src/builtin/TypedObject.js b/js/src/builtin/TypedObject.js
index e5c7932c9eb..b67a77ae2fd 100644
--- a/js/src/builtin/TypedObject.js
+++ b/js/src/builtin/TypedObject.js
@@ -415,6 +415,73 @@ function TypeObjectEquivalent(otherTypeObj) {
return TYPE_TYPE_REPR(this) === TYPE_TYPE_REPR(otherTypeObj);
}
+// TypedArray.redimension(newArrayType)
+//
+// Method that "repackages" the data from this array into a new typed
+// object whose type is `newArrayType`. Once you strip away all the
+// outer array dimensions, the type of `this` array and `newArrayType`
+// must share the same innermost element type. Moreover, those
+// stripped away dimensions must amount to the same total number of
+// elements.
+//
+// For example, given two equivalent types `T` and `U`, it is legal to
+// interconvert between arrays types like:
+// T[32]
+// U[2][16]
+// U[2][2][8]
+// Because they all share the same total number (32) of equivalent elements.
+// But it would be illegal to convert `T[32]` to `U[31]` or `U[2][17]`, since
+// the number of elements differs. And it's just plain incompatible to convert
+// if the base element types are not equivalent.
+//
+// Warning: user exposed!
+function TypedArrayRedimension(newArrayType) {
+ if (!IsObject(this) || !ObjectIsTypedDatum(this))
+ ThrowError(JSMSG_TYPEDOBJECT_HANDLE_BAD_ARGS, "this", "typed array");
+
+ if (!IsObject(newArrayType) || !ObjectIsTypeObject(newArrayType))
+ ThrowError(JSMSG_TYPEDOBJECT_HANDLE_BAD_ARGS, 1, "type object");
+
+ // Peel away the outermost array layers from the type of `this` to find
+ // the core element type. In the process, count the number of elements.
+ var oldArrayType = DATUM_TYPE_OBJ(this);
+ var oldElementType = oldArrayType;
+ var oldElementCount = 1;
+ while (REPR_KIND(TYPE_TYPE_REPR(oldElementType)) == JS_TYPEREPR_ARRAY_KIND) {
+ oldElementCount *= oldElementType.length;
+ oldElementType = oldElementType.elementType;
+ }
+
+ // Peel away the outermost array layers from `newArrayType`. In the
+ // process, count the number of elements.
+ var newElementType = newArrayType;
+ var newElementCount = 1;
+ while (REPR_KIND(TYPE_TYPE_REPR(newElementType)) == JS_TYPEREPR_ARRAY_KIND) {
+ newElementCount *= newElementType.length;
+ newElementType = newElementType.elementType;
+ }
+
+ // Check that the total number of elements does not change.
+ if (oldElementCount !== newElementCount) {
+ ThrowError(JSMSG_TYPEDOBJECT_HANDLE_BAD_ARGS, 1,
+ "New number of elements does not match old number of elements");
+ }
+
+ // Check that the element types are equivalent.
+ if (TYPE_TYPE_REPR(oldElementType) !== TYPE_TYPE_REPR(newElementType)) {
+ ThrowError(JSMSG_TYPEDOBJECT_HANDLE_BAD_ARGS, 1,
+ "New element type is not equivalent to old element type");
+ }
+
+ // Together, this should imply that the sizes are unchanged.
+ assert(REPR_SIZE(TYPE_TYPE_REPR(oldArrayType)) ==
+ REPR_SIZE(TYPE_TYPE_REPR(newArrayType)),
+ "Byte sizes should be equal");
+
+ // Rewrap the data from `this` in a new type.
+ return NewDerivedTypedDatum(newArrayType, this, 0);
+}
+
///////////////////////////////////////////////////////////////////////////
// Handles
//
diff --git a/js/src/config/rules.mk b/js/src/config/rules.mk
index 93cd9426e73..42d10170b03 100644
--- a/js/src/config/rules.mk
+++ b/js/src/config/rules.mk
@@ -800,7 +800,7 @@ else # !WINNT || GNU_CC
endif # WINNT && !GNU_CC
ifdef ENABLE_STRIP
- $(STRIP) $@
+ $(STRIP) $(STRIP_FLAGS) $@
endif
ifdef MOZ_POST_PROGRAM_COMMAND
$(MOZ_POST_PROGRAM_COMMAND) $@
@@ -856,7 +856,7 @@ else
endif # WINNT && !GNU_CC
ifdef ENABLE_STRIP
- $(STRIP) $@
+ $(STRIP) $(STRIP_FLAGS) $@
endif
ifdef MOZ_POST_PROGRAM_COMMAND
$(MOZ_POST_PROGRAM_COMMAND) $@
@@ -883,7 +883,6 @@ $(filter %.$(LIB_SUFFIX),$(LIBRARY)): $(OBJS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
$(REPORT_BUILD)
$(RM) $(LIBRARY)
$(EXPAND_AR) $(AR_FLAGS) $(OBJS) $(SHARED_LIBRARY_LIBS)
- $(RANLIB) $@
$(filter-out %.$(LIB_SUFFIX),$(LIBRARY)): $(filter %.$(LIB_SUFFIX),$(LIBRARY)) $(OBJS) $(EXTRA_DEPS) $(GLOBAL_DEPS)
# When we only build a library descriptor, blow out any existing library
@@ -917,14 +916,12 @@ $(IMPORT_LIBRARY): $(SHARED_LIBRARY)
$(REPORT_BUILD)
$(RM) $@
$(IMPLIB) $@ $^
- $(RANLIB) $@
endif # OS/2
$(HOST_LIBRARY): $(HOST_OBJS) Makefile
$(REPORT_BUILD)
$(RM) $@
$(EXPAND_LIBS_EXEC) --extract -- $(HOST_AR) $(HOST_AR_FLAGS) $(HOST_OBJS)
- $(HOST_RANLIB) $@
ifdef HAVE_DTRACE
ifndef XP_MACOSX
@@ -975,7 +972,7 @@ endif # WINNT && !GCC
@$(RM) foodummyfilefoo $(DELETE_AFTER_LINK)
chmod +x $@
ifdef ENABLE_STRIP
- $(STRIP) $@
+ $(STRIP) $(STRIP_FLAGS) $@
endif
ifdef MOZ_POST_DSO_LIB_COMMAND
$(MOZ_POST_DSO_LIB_COMMAND) $@
diff --git a/js/src/configure.in b/js/src/configure.in
index f065f5a4466..bb900b5b8c3 100644
--- a/js/src/configure.in
+++ b/js/src/configure.in
@@ -284,7 +284,7 @@ dnl to use the cross-compile setup for now
dnl ========================================================
dnl AR_FLAGS set here so HOST_AR_FLAGS can be set correctly (see bug 538269)
-AR_FLAGS='cr $@'
+AR_FLAGS='crs $@'
if test "$COMPILE_ENVIRONMENT"; then
diff --git a/js/src/frontend/BytecodeEmitter.cpp b/js/src/frontend/BytecodeEmitter.cpp
index c99d9b04be9..e72a3b0a200 100644
--- a/js/src/frontend/BytecodeEmitter.cpp
+++ b/js/src/frontend/BytecodeEmitter.cpp
@@ -59,6 +59,7 @@ struct frontend::StmtInfoBCE : public StmtInfoBase
ptrdiff_t update; /* loop update offset (top if none) */
ptrdiff_t breaks; /* offset of last break in loop */
ptrdiff_t continues; /* offset of last continue in loop */
+ uint32_t blockScopeIndex; /* index of scope in BlockScopeArray */
StmtInfoBCE(ExclusiveContext *cx) : StmtInfoBase(cx) {}
@@ -100,10 +101,11 @@ BytecodeEmitter::BytecodeEmitter(BytecodeEmitter *parent,
atomIndices(sc->context),
firstLine(lineNum),
stackDepth(0), maxStackDepth(0),
- tryNoteList(sc->context),
arrayCompDepth(0),
emitLevel(0),
constList(sc->context),
+ tryNoteList(sc->context),
+ blockScopeList(sc->context),
typesetCount(0),
hasSingletons(false),
emittingForInit(false),
@@ -686,13 +688,23 @@ EnclosingStaticScope(BytecodeEmitter *bce)
}
// Push a block scope statement and link blockObj into bce->blockChain.
-static void
-PushBlockScopeBCE(BytecodeEmitter *bce, StmtInfoBCE *stmt, StaticBlockObject &blockObj,
+static bool
+PushBlockScopeBCE(BytecodeEmitter *bce, StmtInfoBCE *stmt, ObjectBox *objbox,
ptrdiff_t top)
{
+ StaticBlockObject &blockObj = objbox->object->as();
+
PushStatementBCE(bce, stmt, STMT_BLOCK, top);
+
+ unsigned scopeObjectIndex = bce->objectList.add(objbox);
+ stmt->blockScopeIndex = bce->blockScopeList.length();
+ if (!bce->blockScopeList.append(scopeObjectIndex, bce->offset()))
+ return false;
+
blockObj.initEnclosingStaticScope(EnclosingStaticScope(bce));
FinishPushBlockScope(bce, stmt, blockObj);
+
+ return true;
}
// Patches |breaks| and |continues| unless the top statement info record
@@ -707,6 +719,10 @@ PopStatementBCE(ExclusiveContext *cx, BytecodeEmitter *bce)
{
return false;
}
+
+ if (stmt->isBlockScope)
+ bce->blockScopeList.recordEnd(stmt->blockScopeIndex, bce->offset());
+
FinishPopStatement(bce);
return true;
}
@@ -770,10 +786,17 @@ EmitAtomOp(ExclusiveContext *cx, ParseNode *pn, JSOp op, BytecodeEmitter *bce)
}
static bool
-EmitObjectOp(ExclusiveContext *cx, ObjectBox *objbox, JSOp op, BytecodeEmitter *bce)
+EmitInternedObjectOp(ExclusiveContext *cx, uint32_t index, JSOp op, BytecodeEmitter *bce)
{
JS_ASSERT(JOF_OPTYPE(op) == JOF_OBJECT);
- return EmitIndex32(cx, op, bce->objectList.add(objbox), bce);
+ JS_ASSERT(index < bce->objectList.length);
+ return EmitIndex32(cx, op, index, bce);
+}
+
+static bool
+EmitObjectOp(ExclusiveContext *cx, ObjectBox *objbox, JSOp op, BytecodeEmitter *bce)
+{
+ return EmitInternedObjectOp(cx, bce->objectList.add(objbox), op, bce);
}
static bool
@@ -1061,7 +1084,15 @@ static bool
EmitEnterBlock(ExclusiveContext *cx, BytecodeEmitter *bce, ParseNode *pn, JSOp op)
{
JS_ASSERT(pn->isKind(PNK_LEXICALSCOPE));
- if (!EmitObjectOp(cx, pn->pn_objbox, op, bce))
+ StmtInfoBCE *stmt = bce->topStmt;
+ JS_ASSERT(stmt->type == STMT_BLOCK || stmt->type == STMT_SWITCH);
+ JS_ASSERT(stmt->isBlockScope);
+ JS_ASSERT(stmt->blockScopeIndex == bce->blockScopeList.length() - 1);
+ JS_ASSERT(bce->blockScopeList.list[stmt->blockScopeIndex].length == 0);
+ uint32_t scopeObjectIndex = bce->blockScopeList.list[stmt->blockScopeIndex].index;
+ JS_ASSERT(scopeObjectIndex == bce->objectList.length - 1);
+ JS_ASSERT(pn->pn_objbox == bce->objectList.lastbox);
+ if (!EmitInternedObjectOp(cx, scopeObjectIndex, op, bce))
return false;
Rooted blockObj(cx, &pn->pn_objbox->object->as());
@@ -2305,7 +2336,8 @@ EmitSwitch(ExclusiveContext *cx, BytecodeEmitter *bce, ParseNode *pn)
return false;
if (pn2->isKind(PNK_LEXICALSCOPE)) {
- PushBlockScopeBCE(bce, &stmtInfo, pn2->pn_objbox->object->as(), -1);
+ if (!PushBlockScopeBCE(bce, &stmtInfo, pn2->pn_objbox, -1))
+ return false;
stmtInfo.type = STMT_SWITCH;
if (!EmitEnterBlock(cx, bce, pn2, JSOP_ENTERLET1))
return false;
@@ -4193,7 +4225,8 @@ EmitLet(ExclusiveContext *cx, BytecodeEmitter *bce, ParseNode *pnLet)
}
StmtInfoBCE stmtInfo(cx);
- PushBlockScopeBCE(bce, &stmtInfo, *blockObj, bce->offset());
+ if (!PushBlockScopeBCE(bce, &stmtInfo, letBody->pn_objbox, bce->offset()))
+ return false;
DebugOnly bodyBegin = bce->offset();
if (!EmitEnterBlock(cx, bce, letBody, JSOP_ENTERLET0))
@@ -4226,7 +4259,8 @@ EmitLexicalScope(ExclusiveContext *cx, BytecodeEmitter *bce, ParseNode *pn)
ObjectBox *objbox = pn->pn_objbox;
StaticBlockObject &blockObj = objbox->object->as();
size_t slots = blockObj.slotCount();
- PushBlockScopeBCE(bce, &stmtInfo, blockObj, bce->offset());
+ if (!PushBlockScopeBCE(bce, &stmtInfo, objbox, bce->offset()))
+ return false;
if (!EmitEnterBlock(cx, bce, pn, JSOP_ENTERBLOCK))
return false;
@@ -4316,7 +4350,8 @@ EmitForOf(ExclusiveContext *cx, BytecodeEmitter *bce, ParseNode *pn, ptrdiff_t t
// Enter the block before the loop body, after evaluating the obj.
StmtInfoBCE letStmt(cx);
if (letDecl) {
- PushBlockScopeBCE(bce, &letStmt, *blockObj, bce->offset());
+ if (!PushBlockScopeBCE(bce, &letStmt, pn1->pn_objbox, bce->offset()))
+ return false;
letStmt.isForLetBlock = true;
if (!EmitEnterBlock(cx, bce, pn1, JSOP_ENTERLET2))
return false;
@@ -4492,7 +4527,8 @@ EmitForIn(ExclusiveContext *cx, BytecodeEmitter *bce, ParseNode *pn, ptrdiff_t t
/* Enter the block before the loop body, after evaluating the obj. */
StmtInfoBCE letStmt(cx);
if (letDecl) {
- PushBlockScopeBCE(bce, &letStmt, *blockObj, bce->offset());
+ if (!PushBlockScopeBCE(bce, &letStmt, pn1->pn_objbox, bce->offset()))
+ return false;
letStmt.isForLetBlock = true;
if (!EmitEnterBlock(cx, bce, pn1, JSOP_ENTERLET1))
return false;
@@ -6775,25 +6811,8 @@ frontend::FinishTakingSrcNotes(ExclusiveContext *cx, BytecodeEmitter *bce, jssrc
return true;
}
-bool
-CGTryNoteList::append(JSTryNoteKind kind, unsigned stackDepth, size_t start, size_t end)
-{
- JS_ASSERT(unsigned(uint16_t(stackDepth)) == stackDepth);
- JS_ASSERT(start <= end);
- JS_ASSERT(size_t(uint32_t(start)) == start);
- JS_ASSERT(size_t(uint32_t(end)) == end);
-
- JSTryNote note;
- note.kind = kind;
- note.stackDepth = uint16_t(stackDepth);
- note.start = uint32_t(start);
- note.length = uint32_t(end - start);
-
- return list.append(note);
-}
-
void
-CGTryNoteList::finish(TryNoteArray *array)
+CGConstList::finish(ConstArray *array)
{
JS_ASSERT(length() == array->length);
@@ -6878,8 +6897,56 @@ CGObjectList::finish(ObjectArray *array)
JS_ASSERT(cursor == array->vector);
}
+bool
+CGTryNoteList::append(JSTryNoteKind kind, unsigned stackDepth, size_t start, size_t end)
+{
+ JS_ASSERT(unsigned(uint16_t(stackDepth)) == stackDepth);
+ JS_ASSERT(start <= end);
+ JS_ASSERT(size_t(uint32_t(start)) == start);
+ JS_ASSERT(size_t(uint32_t(end)) == end);
+
+ JSTryNote note;
+ note.kind = kind;
+ note.stackDepth = uint16_t(stackDepth);
+ note.start = uint32_t(start);
+ note.length = uint32_t(end - start);
+
+ return list.append(note);
+}
+
void
-CGConstList::finish(ConstArray *array)
+CGTryNoteList::finish(TryNoteArray *array)
+{
+ JS_ASSERT(length() == array->length);
+
+ for (unsigned i = 0; i < length(); i++)
+ array->vector[i] = list[i];
+}
+
+bool
+CGBlockScopeList::append(uint32_t scopeObject, uint32_t offset)
+{
+ BlockScopeNote note;
+ mozilla::PodZero(¬e);
+
+ note.index = scopeObject;
+ note.start = offset;
+
+ return list.append(note);
+}
+
+void
+CGBlockScopeList::recordEnd(uint32_t index, uint32_t offset)
+{
+ JS_ASSERT(index < length());
+ JS_ASSERT(offset >= list[index].start);
+ JS_ASSERT(list[index].length == 0);
+
+ list[index].length = offset - list[index].start;
+}
+
+void
+CGBlockScopeList::finish(BlockScopeArray *array)
{
JS_ASSERT(length() == array->length);
diff --git a/js/src/frontend/BytecodeEmitter.h b/js/src/frontend/BytecodeEmitter.h
index a66d219d200..7266f40cf32 100644
--- a/js/src/frontend/BytecodeEmitter.h
+++ b/js/src/frontend/BytecodeEmitter.h
@@ -28,13 +28,13 @@ template class Parser;
class SharedContext;
class TokenStream;
-struct CGTryNoteList {
- Vector list;
- CGTryNoteList(ExclusiveContext *cx) : list(cx) {}
-
- bool append(JSTryNoteKind kind, unsigned stackDepth, size_t start, size_t end);
+class CGConstList {
+ Vector list;
+ public:
+ CGConstList(ExclusiveContext *cx) : list(cx) {}
+ bool append(Value v) { JS_ASSERT_IF(v.isString(), v.toString()->isAtom()); return list.append(v); }
size_t length() const { return list.length(); }
- void finish(TryNoteArray *array);
+ void finish(ConstArray *array);
};
struct CGObjectList {
@@ -48,13 +48,23 @@ struct CGObjectList {
void finish(ObjectArray *array);
};
-class CGConstList {
- Vector list;
- public:
- CGConstList(ExclusiveContext *cx) : list(cx) {}
- bool append(Value v) { JS_ASSERT_IF(v.isString(), v.toString()->isAtom()); return list.append(v); }
+struct CGTryNoteList {
+ Vector list;
+ CGTryNoteList(ExclusiveContext *cx) : list(cx) {}
+
+ bool append(JSTryNoteKind kind, unsigned stackDepth, size_t start, size_t end);
size_t length() const { return list.length(); }
- void finish(ConstArray *array);
+ void finish(TryNoteArray *array);
+};
+
+struct CGBlockScopeList {
+ Vector list;
+ CGBlockScopeList(ExclusiveContext *cx) : list(cx) {}
+
+ bool append(uint32_t scopeObject, uint32_t offset);
+ void recordEnd(uint32_t index, uint32_t offset);
+ size_t length() const { return list.length(); }
+ void finish(BlockScopeArray *array);
};
struct StmtInfoBCE;
@@ -104,8 +114,6 @@ struct BytecodeEmitter
int stackDepth; /* current stack depth in script frame */
unsigned maxStackDepth; /* maximum stack depth so far */
- CGTryNoteList tryNoteList; /* list of emitted try notes */
-
unsigned arrayCompDepth; /* stack depth of array in comprehension */
unsigned emitLevel; /* js::frontend::EmitTree recursion level */
@@ -115,6 +123,8 @@ struct BytecodeEmitter
CGObjectList objectList; /* list of emitted objects */
CGObjectList regexpList; /* list of emitted regexp that will be
cloned during execution */
+ CGTryNoteList tryNoteList; /* list of emitted try notes */
+ CGBlockScopeList blockScopeList;/* list of emitted block scope notes */
uint16_t typesetCount; /* Number of JOF_TYPESET opcodes generated */
diff --git a/js/src/jit-test/jit_test.py b/js/src/jit-test/jit_test.py
index 1386bf49b22..37b47dca428 100755
--- a/js/src/jit-test/jit_test.py
+++ b/js/src/jit-test/jit_test.py
@@ -164,7 +164,7 @@ def main(argv):
flags = [
[], # no flags, normal baseline and ion
['--ion-eager'], # implies --baseline-eager
- ['--ion-eager', '--ion-check-range-analysis'],
+ ['--ion-eager', '--ion-check-range-analysis', '--no-sse3'],
['--baseline-eager'],
['--baseline-eager', '--no-ti', '--no-fpu'],
['--no-baseline', '--no-ion'],
diff --git a/js/src/jit-test/tests/asm.js/bug928450.js b/js/src/jit-test/tests/asm.js/bug928450.js
index 172860fa0e7..a12036735d0 100644
--- a/js/src/jit-test/tests/asm.js/bug928450.js
+++ b/js/src/jit-test/tests/asm.js/bug928450.js
@@ -1,6 +1,18 @@
(function() {
- "use asm"
+ "use asm";
function f() {
- i((1.5 != 2.) ? 3 : 0)
+ i((1.5 != 2.) ? 3 : 0);
}
+ return f;
+})();
+
+// Bug 933104
+(function() {
+ "use asm";
+ function f(x) {
+ x = +x;
+ x = -2.;
+ (x > -1.5) ? 0 : 0;
+ }
+ return f;
})()
diff --git a/js/src/jit-test/tests/ion/bug936361.js b/js/src/jit-test/tests/ion/bug936361.js
index e64873632f3..cd9325f63a9 100644
--- a/js/src/jit-test/tests/ion/bug936361.js
+++ b/js/src/jit-test/tests/ion/bug936361.js
@@ -1,3 +1,5 @@
+if (typeof ParallelArray === "undefined")
+ quit();
x = ParallelArray([1942], function() {})
x + watch.call(x, "length", (function() {}));
diff --git a/js/src/jit/BacktrackingAllocator.cpp b/js/src/jit/BacktrackingAllocator.cpp
index 38d0fc3341c..16829a9b566 100644
--- a/js/src/jit/BacktrackingAllocator.cpp
+++ b/js/src/jit/BacktrackingAllocator.cpp
@@ -113,12 +113,12 @@ BacktrackingAllocator::go()
return false;
IonSpew(IonSpew_RegAlloc, "Liveness analysis complete");
- if (IonSpewEnabled(IonSpew_RegAlloc))
- dumpLiveness();
-
if (!init())
return false;
+ if (IonSpewEnabled(IonSpew_RegAlloc))
+ dumpLiveness();
+
if (!allocationQueue.reserve(graph.numVirtualRegisters() * 3 / 2))
return false;
@@ -317,7 +317,9 @@ BacktrackingAllocator::tryGroupReusedRegister(uint32_t def, uint32_t use)
if (!newIntervals.append(preInterval) || !newIntervals.append(postInterval))
return false;
- if (!distributeUses(interval, newIntervals) || !split(interval, newIntervals))
+ distributeUses(interval, newIntervals);
+
+ if (!split(interval, newIntervals))
return false;
JS_ASSERT(usedReg.numIntervals() == 2);
@@ -331,7 +333,9 @@ bool
BacktrackingAllocator::groupAndQueueRegisters()
{
// Try to group registers with their reused inputs.
- for (size_t i = 0; i < graph.numVirtualRegisters(); i++) {
+ // Virtual register number 0 is unused.
+ JS_ASSERT(vregs[0u].numIntervals() == 0);
+ for (size_t i = 1; i < graph.numVirtualRegisters(); i++) {
BacktrackingVirtualRegister ® = vregs[i];
if (!reg.numIntervals())
continue;
@@ -357,7 +361,9 @@ BacktrackingAllocator::groupAndQueueRegisters()
}
}
- for (size_t i = 0; i < graph.numVirtualRegisters(); i++) {
+ // Virtual register number 0 is unused.
+ JS_ASSERT(vregs[0u].numIntervals() == 0);
+ for (size_t i = 1; i < graph.numVirtualRegisters(); i++) {
if (mir->shouldCancel("Backtracking Enqueue Registers"))
return false;
@@ -491,19 +497,17 @@ BacktrackingAllocator::processInterval(LiveInterval *interval)
return true;
}
}
- }
- // Failed to allocate a register for this interval.
-
- if (attempt < MAX_ATTEMPTS &&
- canAllocate &&
- !fixed &&
- conflict &&
- computeSpillWeight(conflict) < computeSpillWeight(interval))
- {
- if (!evictInterval(conflict))
- return false;
- continue;
+ // Failed to allocate a register for this interval.
+ if (attempt < MAX_ATTEMPTS &&
+ !fixed &&
+ conflict &&
+ computeSpillWeight(conflict) < computeSpillWeight(interval))
+ {
+ if (!evictInterval(conflict))
+ return false;
+ continue;
+ }
}
// A minimal interval cannot be split any further. If we try to split
@@ -757,7 +761,7 @@ BacktrackingAllocator::evictInterval(LiveInterval *interval)
return allocationQueue.insert(QueueItem(interval, priority));
}
-bool
+void
BacktrackingAllocator::distributeUses(LiveInterval *interval,
const LiveIntervalVector &newIntervals)
{
@@ -782,8 +786,6 @@ BacktrackingAllocator::distributeUses(LiveInterval *interval,
}
addInterval->addUse(new UsePosition(iter->use, iter->pos));
}
-
- return true;
}
bool
@@ -791,7 +793,7 @@ BacktrackingAllocator::split(LiveInterval *interval,
const LiveIntervalVector &newIntervals)
{
if (IonSpewEnabled(IonSpew_RegAlloc)) {
- IonSpew(IonSpew_RegAlloc, "splitting interval v%u %s:",
+ IonSpew(IonSpew_RegAlloc, "splitting interval v%u %s into:",
interval->vreg(), IntervalString(interval));
for (size_t i = 0; i < newIntervals.length(); i++)
IonSpew(IonSpew_RegAlloc, " %s", IntervalString(newIntervals[i]));
@@ -885,7 +887,9 @@ BacktrackingAllocator::spill(LiveInterval *interval)
bool
BacktrackingAllocator::resolveControlFlow()
{
- for (size_t i = 0; i < graph.numVirtualRegisters(); i++) {
+ // Virtual register number 0 is unused.
+ JS_ASSERT(vregs[0u].numIntervals() == 0);
+ for (size_t i = 1; i < graph.numVirtualRegisters(); i++) {
BacktrackingVirtualRegister *reg = &vregs[i];
if (mir->shouldCancel("Backtracking Resolve Control Flow (vreg loop)"))
@@ -1001,11 +1005,11 @@ BacktrackingAllocator::isReusedInput(LUse *use, LInstruction *ins, bool consider
}
bool
-BacktrackingAllocator::isRegisterUse(LUse *use, LInstruction *ins)
+BacktrackingAllocator::isRegisterUse(LUse *use, LInstruction *ins, bool considerCopy)
{
switch (use->policy()) {
case LUse::ANY:
- return isReusedInput(use, ins);
+ return isReusedInput(use, ins, considerCopy);
case LUse::REGISTER:
case LUse::FIXED:
@@ -1035,7 +1039,9 @@ BacktrackingAllocator::isRegisterDefinition(LiveInterval *interval)
bool
BacktrackingAllocator::reifyAllocations()
{
- for (size_t i = 0; i < graph.numVirtualRegisters(); i++) {
+ // Virtual register number 0 is unused.
+ JS_ASSERT(vregs[0u].numIntervals() == 0);
+ for (size_t i = 1; i < graph.numVirtualRegisters(); i++) {
VirtualRegister *reg = &vregs[i];
if (mir->shouldCancel("Backtracking Reify Allocations (main loop)"))
@@ -1095,7 +1101,9 @@ BacktrackingAllocator::populateSafepoints()
{
size_t firstSafepoint = 0;
- for (uint32_t i = 0; i < vregs.numVirtualRegisters(); i++) {
+ // Virtual register number 0 is unused.
+ JS_ASSERT(!vregs[0u].def());
+ for (uint32_t i = 1; i < vregs.numVirtualRegisters(); i++) {
BacktrackingVirtualRegister *reg = &vregs[i];
if (!reg->def() || (!IsTraceable(reg) && !IsSlotsOrElements(reg) && !IsNunbox(reg)))
@@ -1132,7 +1140,7 @@ BacktrackingAllocator::populateSafepoints()
for (size_t k = 0; k < reg->numIntervals(); k++) {
LiveInterval *interval = reg->getInterval(k);
- if (!interval->covers(inputOf(ins)))
+ if (!interval->covers(outputOf(ins)))
continue;
LAllocation *a = interval->getAllocation();
@@ -1172,7 +1180,10 @@ void
BacktrackingAllocator::dumpRegisterGroups()
{
fprintf(stderr, "Register groups:\n");
- for (size_t i = 0; i < graph.numVirtualRegisters(); i++) {
+
+ // Virtual register number 0 is unused.
+ JS_ASSERT(!vregs[0u].group());
+ for (size_t i = 1; i < graph.numVirtualRegisters(); i++) {
VirtualRegisterGroup *group = vregs[i].group();
if (group && i == group->canonicalReg()) {
for (size_t j = 0; j < group->registers.length(); j++)
@@ -1200,11 +1211,12 @@ BacktrackingAllocator::dumpLiveness()
for (size_t i = 0; i < block->numPhis(); i++) {
LPhi *phi = block->getPhi(i);
- fprintf(stderr, "[%u,%u Phi v%u <-",
- inputOf(phi).pos(), outputOf(phi).pos(),
+ // Don't print the inputOf for phi nodes, since it's never used.
+ fprintf(stderr, "[,%u Phi [def v%u] <-",
+ outputOf(phi).pos(),
phi->getDef(0)->virtualRegister());
for (size_t j = 0; j < phi->numOperands(); j++)
- fprintf(stderr, " v%u", phi->getOperand(j)->toUse()->virtualRegister());
+ fprintf(stderr, " %s", phi->getOperand(j)->toString());
fprintf(stderr, "]\n");
}
@@ -1224,10 +1236,8 @@ BacktrackingAllocator::dumpLiveness()
fprintf(stderr, " [def v%u]", def->virtualRegister());
}
- for (LInstruction::InputIterator alloc(*ins); alloc.more(); alloc.next()) {
- if (alloc->isUse())
- fprintf(stderr, " [use v%u]", alloc->toUse()->virtualRegister());
- }
+ for (LInstruction::InputIterator alloc(*ins); alloc.more(); alloc.next())
+ fprintf(stderr, " [use %s]", alloc->toString());
fprintf(stderr, "\n");
}
@@ -1236,9 +1246,12 @@ BacktrackingAllocator::dumpLiveness()
fprintf(stderr, "\nLive Ranges:\n\n");
for (size_t i = 0; i < AnyRegister::Total; i++)
- fprintf(stderr, "reg %s: %s\n", AnyRegister::FromCode(i).name(), IntervalString(fixedIntervals[i]));
+ if (registers[i].allocatable)
+ fprintf(stderr, "reg %s: %s\n", AnyRegister::FromCode(i).name(), IntervalString(fixedIntervals[i]));
- for (size_t i = 0; i < graph.numVirtualRegisters(); i++) {
+ // Virtual register number 0 is unused.
+ JS_ASSERT(vregs[0u].numIntervals() == 0);
+ for (size_t i = 1; i < graph.numVirtualRegisters(); i++) {
fprintf(stderr, "v%lu:", static_cast(i));
VirtualRegister &vreg = vregs[i];
for (size_t j = 0; j < vreg.numIntervals(); j++) {
@@ -1259,9 +1272,13 @@ struct BacktrackingAllocator::PrintLiveIntervalRange
void operator()(const AllocatedRange &item)
{
if (item.range == item.interval->getRange(0)) {
- fprintf(stderr, " v%u: %s\n",
- item.interval->hasVreg() ? item.interval->vreg() : 0,
- IntervalString(item.interval));
+ if (item.interval->hasVreg())
+ fprintf(stderr, " v%u: %s\n",
+ item.interval->vreg(),
+ IntervalString(item.interval));
+ else
+ fprintf(stderr, " fixed: %s\n",
+ IntervalString(item.interval));
}
}
};
@@ -1273,7 +1290,9 @@ BacktrackingAllocator::dumpAllocations()
#ifdef DEBUG
fprintf(stderr, "Allocations:\n");
- for (size_t i = 0; i < graph.numVirtualRegisters(); i++) {
+ // Virtual register number 0 is unused.
+ JS_ASSERT(vregs[0u].numIntervals() == 0);
+ for (size_t i = 1; i < graph.numVirtualRegisters(); i++) {
fprintf(stderr, "v%lu:", static_cast(i));
VirtualRegister &vreg = vregs[i];
for (size_t j = 0; j < vreg.numIntervals(); j++) {
@@ -1288,8 +1307,10 @@ BacktrackingAllocator::dumpAllocations()
fprintf(stderr, "\n");
for (size_t i = 0; i < AnyRegister::Total; i++) {
- fprintf(stderr, "reg %s:\n", AnyRegister::FromCode(i).name());
- registers[i].allocations.forEach(PrintLiveIntervalRange());
+ if (registers[i].allocatable) {
+ fprintf(stderr, "reg %s:\n", AnyRegister::FromCode(i).name());
+ registers[i].allocations.forEach(PrintLiveIntervalRange());
+ }
}
fprintf(stderr, "\n");
@@ -1342,7 +1363,7 @@ BacktrackingAllocator::minimalDef(const LiveInterval *interval, LInstruction *in
{
// Whether interval is a minimal interval capturing a definition at ins.
return (interval->end() <= minimalDefEnd(ins).next()) &&
- (interval->start() == inputOf(ins) || interval->start() == outputOf(ins));
+ ((!ins->isPhi() && interval->start() == inputOf(ins)) || interval->start() == outputOf(ins));
}
bool
@@ -1530,10 +1551,10 @@ BacktrackingAllocator::trySplitAcrossHotcode(LiveInterval *interval, bool *succe
if (postInterval && !newIntervals.append(postInterval))
return false;
+ distributeUses(interval, newIntervals);
+
*success = true;
- return distributeUses(interval, newIntervals) &&
- split(interval, newIntervals) &&
- requeueIntervals(newIntervals);
+ return split(interval, newIntervals) && requeueIntervals(newIntervals);
}
bool
@@ -1555,22 +1576,9 @@ BacktrackingAllocator::trySplitAfterLastRegisterUse(LiveInterval *interval, bool
JS_ASSERT(iter->pos >= lastUse);
lastUse = inputOf(ins);
- switch (use->policy()) {
- case LUse::ANY:
- if (isReusedInput(iter->use, ins, /* considerCopy = */ true)) {
- lastRegisterFrom = inputOf(ins);
- lastRegisterTo = iter->pos.next();
- }
- break;
-
- case LUse::REGISTER:
- case LUse::FIXED:
+ if (isRegisterUse(use, ins, /* considerCopy = */ true)) {
lastRegisterFrom = inputOf(ins);
lastRegisterTo = iter->pos.next();
- break;
-
- default:
- break;
}
}
@@ -1602,10 +1610,10 @@ BacktrackingAllocator::trySplitAfterLastRegisterUse(LiveInterval *interval, bool
if (!newIntervals.append(preInterval) || !newIntervals.append(postInterval))
return false;
+ distributeUses(interval, newIntervals);
+
*success = true;
- return distributeUses(interval, newIntervals) &&
- split(interval, newIntervals) &&
- requeueIntervals(newIntervals);
+ return split(interval, newIntervals) && requeueIntervals(newIntervals);
}
bool
diff --git a/js/src/jit/BacktrackingAllocator.h b/js/src/jit/BacktrackingAllocator.h
index 9e10f2b8c82..a42cf8dea7a 100644
--- a/js/src/jit/BacktrackingAllocator.h
+++ b/js/src/jit/BacktrackingAllocator.h
@@ -192,13 +192,13 @@ class BacktrackingAllocator : public LiveRangeAllocatoradd(MFunctionBoundary::New(script(), MFunctionBoundary::Enter));
+ // Guard against over-recursion. Do this before we start unboxing, since
+ // this will create an OSI point that will read the incoming argument
+ // values, which is nice to do before their last real use, to minimize
+ // register/stack pressure.
+ MCheckOverRecursed *check = new MCheckOverRecursed;
+ current->add(check);
+ check->setResumePoint(current->entryResumePoint());
+
// Parameters have been checked to correspond to the typeset, now we unbox
// what we can in an infallible manner.
rewriteParameters();
@@ -607,11 +615,6 @@ IonBuilder::build()
if (info().needsArgsObj() && !initArgumentsObject())
return false;
- // Guard against over-recursion.
- MCheckOverRecursed *check = new MCheckOverRecursed;
- current->add(check);
- check->setResumePoint(current->entryResumePoint());
-
// Prevent |this| from being DCE'd: necessary for constructors.
if (info().fun())
current->getSlot(info().thisSlot())->setGuard();
@@ -6529,9 +6532,9 @@ IonBuilder::getElemTryScalarElemOfTypedObject(bool *emitted,
JS_ASSERT(objTypeReprs.allOfArrayKind());
// Must always be loading the same scalar type
- if (elemTypeReprs.length() != 1)
+ if (!elemTypeReprs.singleton())
return true;
- ScalarTypeRepresentation *elemTypeRepr = elemTypeReprs.get(0)->asScalar();
+ ScalarTypeRepresentation *elemTypeRepr = elemTypeReprs.getTypeRepresentation()->asScalar();
// Get the length.
size_t lenOfAll = objTypeReprs.arrayLength();
@@ -6550,40 +6553,19 @@ IonBuilder::getElemTryScalarElemOfTypedObject(bool *emitted,
// Typed-object accesses usually in bounds (bail out otherwise).
index = addBoundsCheck(index, length);
+ // Since we passed the bounds check, it is impossible for the
+ // result of multiplication to overflow; so enable imul path.
+ const int32_t alignment = elemTypeRepr->alignment();
+ MMul *indexAsByteOffset = MMul::New(index, constantInt(alignment),
+ MIRType_Int32, MMul::Integer);
+ current->add(indexAsByteOffset);
+
// Find location within the owner object.
- MDefinition *owner;
- MDefinition *indexFromOwner;
- if (obj->isNewDerivedTypedObject()) {
- MNewDerivedTypedObject *ins = obj->toNewDerivedTypedObject();
- MDefinition *ownerOffset = ins->offset();
-
- // Typed array offsets are expressed in units of the (array)
- // element alignment. The binary data uses byte units for
- // offsets (such as the owner offset here).
-
- MConstant *alignment = MConstant::New(Int32Value(elemTypeRepr->alignment()));
- current->add(alignment);
-
- MDiv *scaledOffset = MDiv::NewAsmJS(ownerOffset, alignment, MIRType_Int32);
- current->add(scaledOffset);
-
- MAdd *scaledOffsetPlusIndex = MAdd::NewAsmJS(scaledOffset, index,
- MIRType_Int32);
- current->add(scaledOffsetPlusIndex);
-
- owner = ins->owner();
- indexFromOwner = scaledOffsetPlusIndex;
- } else {
- owner = obj;
- indexFromOwner = index;
- }
-
- // Load the element data.
- MTypedObjectElements *elements = MTypedObjectElements::New(owner);
- current->add(elements);
+ MDefinition *elements, *scaledOffset;
+ loadTypedObjectElements(obj, indexAsByteOffset, alignment, &elements, &scaledOffset);
// Load the element.
- MLoadTypedArrayElement *load = MLoadTypedArrayElement::New(elements, indexFromOwner, elemTypeRepr->type());
+ MLoadTypedArrayElement *load = MLoadTypedArrayElement::New(elements, scaledOffset, elemTypeRepr->type());
current->add(load);
current->push(load);
@@ -6613,8 +6595,7 @@ IonBuilder::getElemTryComplexElemOfTypedObject(bool *emitted,
JS_ASSERT(objTypeReprs.allOfArrayKind());
MDefinition *type = loadTypedObjectType(obj);
- MInstruction *elemType = MLoadFixedSlot::New(type, JS_TYPEOBJ_SLOT_ARRAY_ELEM_TYPE);
- current->add(elemType);
+ MDefinition *elemType = typeObjectForElementFromArrayStructType(type);
// Get the length.
size_t lenOfAll = objTypeReprs.arrayLength();
@@ -6644,33 +6625,14 @@ IonBuilder::getElemTryComplexElemOfTypedObject(bool *emitted,
current->add(indexAsByteOffset);
// Find location within the owner object.
- MDefinition *owner;
- MDefinition *indexAsByteOffsetFromOwner;
- if (obj->isNewDerivedTypedObject()) {
- MNewDerivedTypedObject *ins = obj->toNewDerivedTypedObject();
- MDefinition *ownerOffset = ins->offset();
-
- MAdd *offsetPlusScaledIndex = MAdd::NewAsmJS(ownerOffset,
- indexAsByteOffset,
- MIRType_Int32);
- current->add(offsetPlusScaledIndex);
-
- owner = ins->owner();
- indexAsByteOffsetFromOwner = offsetPlusScaledIndex;
- } else {
- owner = obj;
- indexAsByteOffsetFromOwner = indexAsByteOffset;
- }
-
- // Load the element data.
- MTypedObjectElements *elements = MTypedObjectElements::New(owner);
- current->add(elements);
+ MDefinition *owner, *ownerOffset;
+ loadTypedObjectData(obj, indexAsByteOffset, &owner, &ownerOffset);
// Create the derived type object.
MInstruction *derived = new MNewDerivedTypedObject(elemTypeReprs,
elemType,
owner,
- indexAsByteOffsetFromOwner);
+ ownerOffset);
types::TemporaryTypeSet *resultTypes = bytecodeTypes(pc);
derived->setResultTypeSet(resultTypes);
@@ -8228,22 +8190,19 @@ IonBuilder::getPropTryScalarPropOfTypedObject(bool *emitted,
types::TemporaryTypeSet *resultTypes)
{
// Must always be loading the same scalar type
- if (fieldTypeReprs.length() != 1)
+ if (!fieldTypeReprs.singleton())
return true;
- ScalarTypeRepresentation *fieldTypeRepr = fieldTypeReprs.get(0)->asScalar();
+ ScalarTypeRepresentation *fieldTypeRepr = fieldTypeReprs.getTypeRepresentation()->asScalar();
- // OK!
- *emitted = true;
+ // OK, perform the optimization
MDefinition *typedObj = current->pop();
// Find location within the owner object.
- MDefinition *owner, *ownerOffset;
- loadTypedObjectData(typedObj, fieldOffset, &owner, &ownerOffset);
-
- // Load the element data.
- MTypedObjectElements *elements = MTypedObjectElements::New(owner);
- current->add(elements);
+ MDefinition *elements, *scaledOffset;
+ loadTypedObjectElements(typedObj, constantInt(fieldOffset),
+ fieldTypeRepr->alignment(),
+ &elements, &scaledOffset);
// Reading from an Uint32Array will result in a double for values
// that don't fit in an int32. We have to bailout if this happens
@@ -8251,14 +8210,6 @@ IonBuilder::getPropTryScalarPropOfTypedObject(bool *emitted,
bool allowDouble = resultTypes->hasType(types::Type::DoubleType());
MIRType knownType = MIRTypeForTypedArrayRead(fieldTypeRepr->type(), allowDouble);
- // Typed array offsets are expressed in units of the alignment,
- // and the binary data API guarantees all offsets are properly
- // aligned. So just do the divide.
- MConstant *alignment = MConstant::New(Int32Value(fieldTypeRepr->alignment()));
- current->add(alignment);
- MDiv *scaledOffset = MDiv::NewAsmJS(ownerOffset, alignment, MIRType_Int32);
- current->add(scaledOffset);
-
MLoadTypedArrayElement *load =
MLoadTypedArrayElement::New(elements, scaledOffset,
fieldTypeRepr->type());
@@ -8266,6 +8217,7 @@ IonBuilder::getPropTryScalarPropOfTypedObject(bool *emitted,
load->setResultTypeSet(resultTypes);
current->add(load);
current->push(load);
+ *emitted = true;
return true;
}
@@ -8281,7 +8233,8 @@ IonBuilder::getPropTryComplexPropOfTypedObject(bool *emitted,
if (fieldIndex == SIZE_MAX)
return true;
- *emitted = true;
+ // OK, perform the optimization
+
MDefinition *typedObj = current->pop();
// Identify the type object for the field.
@@ -8290,7 +8243,8 @@ IonBuilder::getPropTryComplexPropOfTypedObject(bool *emitted,
// Find location within the owner object.
MDefinition *owner, *ownerOffset;
- loadTypedObjectData(typedObj, fieldOffset, &owner, &ownerOffset);
+ loadTypedObjectData(typedObj, constantInt(fieldOffset),
+ &owner, &ownerOffset);
// Create the derived type object.
MInstruction *derived = new MNewDerivedTypedObject(fieldTypeReprs,
@@ -8300,6 +8254,7 @@ IonBuilder::getPropTryComplexPropOfTypedObject(bool *emitted,
derived->setResultTypeSet(resultTypes);
current->add(derived);
current->push(derived);
+ *emitted = true;
return true;
}
@@ -8749,43 +8704,34 @@ IonBuilder::setPropTryTypedObject(bool *emitted, MDefinition *obj,
return true;
case TypeRepresentation::Scalar:
- break;
+ return setPropTryScalarPropOfTypedObject(emitted, obj, fieldOffset,
+ value, fieldTypeReprs);
}
+ MOZ_ASSUME_UNREACHABLE("Unknown kind");
+}
+
+bool
+IonBuilder::setPropTryScalarPropOfTypedObject(bool *emitted,
+ MDefinition *obj,
+ int32_t fieldOffset,
+ MDefinition *value,
+ TypeRepresentationSet fieldTypeReprs)
+{
// Must always be storing the same scalar type
- if (fieldTypeReprs.length() != 1)
+ if (!fieldTypeReprs.singleton())
return true;
- ScalarTypeRepresentation *fieldTypeRepr = fieldTypeReprs.get(0)->asScalar();
+ ScalarTypeRepresentation *fieldTypeRepr =
+ fieldTypeReprs.getTypeRepresentation()->asScalar();
- // OK!
- *emitted = true;
+ // OK! Perform the optimization.
- MTypedObjectElements *elements = MTypedObjectElements::New(obj);
- current->add(elements);
-
- // Typed array offsets are expressed in units of the alignment,
- // and the binary data API guarantees all offsets are properly
- // aligned.
- JS_ASSERT(fieldOffset % fieldTypeRepr->alignment() == 0);
- int32_t scaledFieldOffset = fieldOffset / fieldTypeRepr->alignment();
-
- MConstant *offset = MConstant::New(Int32Value(scaledFieldOffset));
- current->add(offset);
-
- // Clamp value to [0, 255] for Uint8ClampedArray.
- MDefinition *toWrite = value;
- if (fieldTypeRepr->type() == ScalarTypeRepresentation::TYPE_UINT8_CLAMPED) {
- toWrite = MClampToUint8::New(value);
- current->add(toWrite->toInstruction());
- }
-
- MStoreTypedArrayElement *store =
- MStoreTypedArrayElement::New(elements, offset, toWrite,
- fieldTypeRepr->type());
- current->add(store);
+ if (!storeScalarTypedObjectValue(obj, constantInt(fieldOffset), fieldTypeRepr, value))
+ return false;
current->push(value);
+ *emitted = true;
return true;
}
@@ -9620,12 +9566,12 @@ IonBuilder::loadTypedObjectType(MDefinition *typedObj)
// into dead code).
void
IonBuilder::loadTypedObjectData(MDefinition *typedObj,
- int32_t offset,
+ MDefinition *offset,
MDefinition **owner,
MDefinition **ownerOffset)
{
- MConstant *offsetDef = MConstant::New(Int32Value(offset));
- current->add(offsetDef);
+ JS_ASSERT(typedObj->type() == MIRType_Object);
+ JS_ASSERT(offset->type() == MIRType_Int32);
// Shortcircuit derived type objects, meaning the intermediate
// objects created to represent `a.b` in an expression like
@@ -9636,8 +9582,7 @@ IonBuilder::loadTypedObjectData(MDefinition *typedObj,
// If we see that the
MNewDerivedTypedObject *ins = typedObj->toNewDerivedTypedObject();
- MAdd *offsetAdd = MAdd::NewAsmJS(ins->offset(), offsetDef,
- MIRType_Int32);
+ MAdd *offsetAdd = MAdd::NewAsmJS(ins->offset(), offset, MIRType_Int32);
current->add(offsetAdd);
*owner = ins->owner();
@@ -9646,7 +9591,38 @@ IonBuilder::loadTypedObjectData(MDefinition *typedObj,
}
*owner = typedObj;
- *ownerOffset = offsetDef;
+ *ownerOffset = offset;
+}
+
+// Takes as input a typed object, an offset into that typed object's
+// memory, and the type repr of the data found at that offset. Returns
+// the elements pointer and a scaled offset. The scaled offset is
+// expressed in units of `unit`; when working with typed array MIR,
+// this is typically the alignment.
+void
+IonBuilder::loadTypedObjectElements(MDefinition *typedObj,
+ MDefinition *offset,
+ int32_t unit,
+ MDefinition **ownerElements,
+ MDefinition **ownerScaledOffset)
+{
+ MDefinition *owner, *ownerOffset;
+ loadTypedObjectData(typedObj, offset, &owner, &ownerOffset);
+
+ // Load the element data.
+ MTypedObjectElements *elements = MTypedObjectElements::New(owner);
+ current->add(elements);
+
+ // Scale to a different unit for compat with typed array MIRs.
+ if (unit != 1) {
+ MDiv *scaledOffset = MDiv::NewAsmJS(ownerOffset, constantInt(unit), MIRType_Int32);
+ current->add(scaledOffset);
+ *ownerScaledOffset = scaledOffset;
+ } else {
+ *ownerScaledOffset = ownerOffset;
+ }
+
+ *ownerElements = elements;
}
// Looks up the offset/type-repr-set of the field `id`, given the type
@@ -9674,7 +9650,7 @@ IonBuilder::lookupTypedObjectField(MDefinition *typedObj,
fieldTypeReprs, fieldIndex))
return false;
if (fieldTypeReprs->empty())
- return false;
+ return true;
// Field offset must be representable as signed integer.
if (offset >= size_t(INT_MAX)) {
@@ -9688,6 +9664,18 @@ IonBuilder::lookupTypedObjectField(MDefinition *typedObj,
return true;
}
+MDefinition *
+IonBuilder::typeObjectForElementFromArrayStructType(MDefinition *typeObj)
+{
+ MInstruction *elemType = MLoadFixedSlot::New(typeObj, JS_TYPEOBJ_SLOT_ARRAY_ELEM_TYPE);
+ current->add(elemType);
+
+ MInstruction *unboxElemType = MUnbox::New(elemType, MIRType_Object, MUnbox::Infallible);
+ current->add(unboxElemType);
+
+ return unboxElemType;
+}
+
MDefinition *
IonBuilder::typeObjectForFieldFromStructType(MDefinition *typeObj,
size_t fieldIndex)
@@ -9697,16 +9685,60 @@ IonBuilder::typeObjectForFieldFromStructType(MDefinition *typeObj,
MInstruction *fieldTypes = MLoadFixedSlot::New(typeObj, JS_TYPEOBJ_SLOT_STRUCT_FIELD_TYPES);
current->add(fieldTypes);
+ MInstruction *unboxFieldTypes = MUnbox::New(fieldTypes, MIRType_Object, MUnbox::Infallible);
+ current->add(unboxFieldTypes);
+
// Index into list with index of field.
- MInstruction *fieldTypesElements = MElements::New(fieldTypes);
+ MInstruction *fieldTypesElements = MElements::New(unboxFieldTypes);
current->add(fieldTypesElements);
- MConstant *fieldIndexDef = MConstant::New(Int32Value(fieldIndex));
- current->add(fieldIndexDef);
+ MConstant *fieldIndexDef = constantInt(fieldIndex);
MInstruction *fieldType = MLoadElement::New(fieldTypesElements, fieldIndexDef, false, false);
current->add(fieldType);
- return fieldType;
+ MInstruction *unboxFieldType = MUnbox::New(fieldType, MIRType_Object, MUnbox::Infallible);
+ current->add(unboxFieldType);
+
+ return unboxFieldType;
+}
+
+bool
+IonBuilder::storeScalarTypedObjectValue(MDefinition *typedObj,
+ MDefinition *offset,
+ ScalarTypeRepresentation *typeRepr,
+ MDefinition *value)
+{
+ // Find location within the owner object.
+ MDefinition *elements, *scaledOffset;
+ loadTypedObjectElements(typedObj, offset, typeRepr->alignment(), &elements, &scaledOffset);
+
+ // Clamp value to [0, 255] when type is Uint8Clamped
+ MDefinition *toWrite = value;
+ if (typeRepr->type() == ScalarTypeRepresentation::TYPE_UINT8_CLAMPED) {
+ toWrite = MClampToUint8::New(value);
+ current->add(toWrite->toInstruction());
+ }
+
+ MStoreTypedArrayElement *store =
+ MStoreTypedArrayElement::New(elements, scaledOffset, toWrite,
+ typeRepr->type());
+ current->add(store);
+
+ return true;
+}
+
+MConstant *
+IonBuilder::constant(const Value &v)
+{
+ MConstant *c = MConstant::New(v);
+ current->add(c);
+ return c;
+}
+
+MConstant *
+IonBuilder::constantInt(int32_t i)
+{
+ return constant(Int32Value(i));
}
diff --git a/js/src/jit/IonBuilder.h b/js/src/jit/IonBuilder.h
index 5950f2560df..e07da6de604 100644
--- a/js/src/jit/IonBuilder.h
+++ b/js/src/jit/IonBuilder.h
@@ -327,6 +327,9 @@ class IonBuilder : public MIRGenerator
bool initArgumentsObject();
bool pushConstant(const Value &v);
+ MConstant *constant(const Value &v);
+ MConstant *constantInt(int32_t i);
+
// Add a guard which ensure that the set of type which goes through this
// generated code correspond to the observed types for the bytecode.
bool pushTypeBarrier(MInstruction *ins, types::TemporaryTypeSet *observed, bool needBarrier);
@@ -400,6 +403,11 @@ class IonBuilder : public MIRGenerator
types::TemporaryTypeSet *objTypes);
bool setPropTryTypedObject(bool *emitted, MDefinition *obj,
PropertyName *name, MDefinition *value);
+ bool setPropTryScalarPropOfTypedObject(bool *emitted,
+ MDefinition *obj,
+ int32_t fieldOffset,
+ MDefinition *value,
+ TypeRepresentationSet fieldTypeReprs);
bool setPropTryCache(bool *emitted, MDefinition *obj,
PropertyName *name, MDefinition *value,
bool barrier, types::TemporaryTypeSet *objTypes);
@@ -413,12 +421,22 @@ class IonBuilder : public MIRGenerator
TypeRepresentationSet *fieldTypeReprs,
size_t *fieldIndex);
MDefinition *loadTypedObjectType(MDefinition *value);
- void loadTypedObjectData(MDefinition *inOwner,
- int32_t inOffset,
- MDefinition **outOwner,
- MDefinition **outOffset);
+ void loadTypedObjectData(MDefinition *typedObj,
+ MDefinition *offset,
+ MDefinition **owner,
+ MDefinition **ownerOffset);
+ void loadTypedObjectElements(MDefinition *typedObj,
+ MDefinition *offset,
+ int32_t unit,
+ MDefinition **ownerElements,
+ MDefinition **ownerScaledOffset);
+ MDefinition *typeObjectForElementFromArrayStructType(MDefinition *typedObj);
MDefinition *typeObjectForFieldFromStructType(MDefinition *type,
size_t fieldIndex);
+ bool storeScalarTypedObjectValue(MDefinition *typedObj,
+ MDefinition *offset,
+ ScalarTypeRepresentation *typeRepr,
+ MDefinition *value);
// jsop_setelem() helpers.
bool setElemTryTyped(bool *emitted, MDefinition *object,
diff --git a/js/src/jit/IonCaches.cpp b/js/src/jit/IonCaches.cpp
index e271d87de81..f241ca43b43 100644
--- a/js/src/jit/IonCaches.cpp
+++ b/js/src/jit/IonCaches.cpp
@@ -3156,12 +3156,27 @@ GetElementIC::attachDenseElement(JSContext *cx, IonScript *ion, JSObject *obj, c
GetElementIC::canAttachTypedArrayElement(JSObject *obj, const Value &idval,
TypedOrValueRegister output)
{
- if (!obj->is() ||
- (!(idval.isInt32()) &&
- !(idval.isString() && GetIndexFromString(idval.toString()) != UINT32_MAX)))
- {
+ if (!obj->is())
return false;
+
+ if (!idval.isInt32() && !idval.isString())
+ return false;
+
+
+ // Don't emit a stub if the access is out of bounds. We make to make
+ // certain that we monitor the type coming out of the typed array when
+ // we generate the stub. Out of bounds accesses will hit the fallback
+ // path.
+ uint32_t index;
+ if (idval.isInt32()) {
+ index = idval.toInt32();
+ } else {
+ index = GetIndexFromString(idval.toString());
+ if (index == UINT32_MAX)
+ return false;
}
+ if (index >= obj->as().length())
+ return false;
// The output register is not yet specialized as a float register, the only
// way to accept float typed arrays for now is to return a Value type.
diff --git a/js/src/jit/IonFrames.cpp b/js/src/jit/IonFrames.cpp
index b2d68d0132b..a9819bc86ca 100644
--- a/js/src/jit/IonFrames.cpp
+++ b/js/src/jit/IonFrames.cpp
@@ -549,30 +549,41 @@ HandleException(ResumeFromException *rfe)
// Search each inlined frame for live iterator objects, and close
// them.
InlineFrameIterator frames(cx, &iter);
+
+ // Invalidation state will be the same for all inlined scripts in the frame.
+ IonScript *ionScript = nullptr;
+ bool invalidated = iter.checkInvalidation(&ionScript);
+
for (;;) {
HandleExceptionIon(cx, frames, rfe, &overrecursed);
if (rfe->kind == ResumeFromException::RESUME_BAILOUT) {
- IonScript *ionScript = nullptr;
- if (iter.checkInvalidation(&ionScript))
+ if (invalidated)
ionScript->decref(cx->runtime()->defaultFreeOp());
return;
}
JS_ASSERT(rfe->kind == ResumeFromException::RESUME_ENTRY_FRAME);
+ // Figure out whether SPS frame was pushed for this frame or not.
+ // Even if profiler is enabled, the frame being popped might have
+ // been entered prior to SPS being enabled, and thus not have
+ // a pushed SPS frame.
+ bool popSPSFrame = cx->runtime()->spsProfiler.enabled();
+ if (invalidated)
+ popSPSFrame = ionScript->hasSPSInstrumentation();
+
// When profiling, each frame popped needs a notification that
// the function has exited, so invoke the probe that a function
// is exiting.
JSScript *script = frames.script();
- probes::ExitScript(cx, script, script->function(), nullptr);
+ probes::ExitScript(cx, script, script->function(), popSPSFrame);
if (!frames.more())
break;
++frames;
}
- IonScript *ionScript = nullptr;
- if (iter.checkInvalidation(&ionScript))
+ if (invalidated)
ionScript->decref(cx->runtime()->defaultFreeOp());
} else if (iter.isBaselineJS()) {
@@ -585,7 +596,8 @@ HandleException(ResumeFromException *rfe)
// Unwind profiler pseudo-stack
JSScript *script = iter.script();
- probes::ExitScript(cx, script, script->function(), iter.baselineFrame());
+ probes::ExitScript(cx, script, script->function(),
+ iter.baselineFrame()->hasPushedSPSFrame());
// After this point, any pushed SPS frame would have been popped if it needed
// to be. Unset the flag here so that if we call DebugEpilogue below,
// it doesn't try to pop the SPS frame again.
diff --git a/js/src/jit/LIR.cpp b/js/src/jit/LIR.cpp
index 24b8059fba6..ee895f6d38b 100644
--- a/js/src/jit/LIR.cpp
+++ b/js/src/jit/LIR.cpp
@@ -236,8 +236,17 @@ PrintUse(char *buf, size_t size, const LUse *use)
JS_snprintf(buf, size, "v%d:%s", use->virtualRegister(),
Registers::GetName(Registers::Code(use->registerCode())));
break;
- default:
+ case LUse::ANY:
+ JS_snprintf(buf, size, "v%d:r?", use->virtualRegister());
+ break;
+ case LUse::KEEPALIVE:
JS_snprintf(buf, size, "v%d:*", use->virtualRegister());
+ break;
+ case LUse::RECOVERED_INPUT:
+ JS_snprintf(buf, size, "v%d:**", use->virtualRegister());
+ break;
+ default:
+ MOZ_ASSUME_UNREACHABLE("invalid use policy");
}
}
diff --git a/js/src/jit/LiveRangeAllocator.cpp b/js/src/jit/LiveRangeAllocator.cpp
index 553cb9d7080..e577ff3e8e3 100644
--- a/js/src/jit/LiveRangeAllocator.cpp
+++ b/js/src/jit/LiveRangeAllocator.cpp
@@ -36,9 +36,7 @@ Requirement::priority() const
bool
LiveInterval::Range::contains(const Range *other) const
{
- Range pre, inside, post;
- intersect(other, &pre, &inside, &post);
- return inside.from == other->from && inside.to == other->to;
+ return from <= other->from && to >= other->to;
}
void
@@ -420,7 +418,7 @@ LiveRangeAllocator::init()
// Build virtual register objects
for (size_t i = 0; i < graph.numBlocks(); i++) {
- if (mir->shouldCancel("LSRA create data structures (main loop)"))
+ if (mir->shouldCancel("Create data structures (main loop)"))
return false;
LBlock *block = graph.getBlock(i);
@@ -498,7 +496,7 @@ LiveRangeAllocator::buildLivenessInfo()
return false;
for (size_t i = graph.numBlocks(); i > 0; i--) {
- if (mir->shouldCancel("LSRA Build Liveness Info (main loop)"))
+ if (mir->shouldCancel("Build Liveness Info (main loop)"))
return false;
LBlock *block = graph.getBlock(i - 1);
diff --git a/js/src/jit/LiveRangeAllocator.h b/js/src/jit/LiveRangeAllocator.h
index c4570a01095..3fecfcb89b4 100644
--- a/js/src/jit/LiveRangeAllocator.h
+++ b/js/src/jit/LiveRangeAllocator.h
@@ -51,7 +51,9 @@ class Requirement
Requirement(LAllocation fixed)
: kind_(FIXED),
allocation_(fixed)
- { }
+ {
+ JS_ASSERT(fixed == LAllocation() || !fixed.isUse());
+ }
// Only useful as a hint, encodes where the fixed requirement is used to
// avoid allocating a fixed register too early.
@@ -59,7 +61,9 @@ class Requirement
: kind_(FIXED),
allocation_(fixed),
position_(at)
- { }
+ {
+ JS_ASSERT(fixed == LAllocation() || !fixed.isUse());
+ }
Requirement(uint32_t vreg, CodePosition at)
: kind_(SAME_AS_OTHER),
@@ -78,6 +82,7 @@ class Requirement
uint32_t virtualRegister() const {
JS_ASSERT(allocation_.isUse());
+ JS_ASSERT(kind() == SAME_AS_OTHER);
return allocation_.toUse()->virtualRegister();
}
@@ -618,6 +623,17 @@ class LiveRangeAllocator : public RegisterAllocator
return addMove(moves, from, to);
}
+ size_t findFirstNonCallSafepoint(CodePosition from) const
+ {
+ size_t i = 0;
+ for (; i < graph.numNonCallSafepoints(); i++) {
+ const LInstruction *ins = graph.getNonCallSafepoint(i);
+ if (from <= (forLSRA ? inputOf(ins) : outputOf(ins)))
+ break;
+ }
+ return i;
+ }
+
void addLiveRegistersForInterval(VirtualRegister *reg, LiveInterval *interval)
{
// Fill in the live register sets for all non-call safepoints.
@@ -633,7 +649,7 @@ class LiveRangeAllocator : public RegisterAllocator
size_t i = findFirstNonCallSafepoint(start);
for (; i < graph.numNonCallSafepoints(); i++) {
LInstruction *ins = graph.getNonCallSafepoint(i);
- CodePosition pos = inputOf(ins);
+ CodePosition pos = forLSRA ? inputOf(ins) : outputOf(ins);
// Safepoints are sorted, so we can shortcut out of this loop
// if we go out of range.
diff --git a/js/src/jit/MIR.h b/js/src/jit/MIR.h
index 395c66be334..e9a290c57c6 100644
--- a/js/src/jit/MIR.h
+++ b/js/src/jit/MIR.h
@@ -3673,8 +3673,15 @@ class MPowHalf
: public MUnaryInstruction,
public DoublePolicy<0>
{
+ bool operandIsNeverNegativeInfinity_;
+ bool operandIsNeverNegativeZero_;
+ bool operandIsNeverNaN_;
+
MPowHalf(MDefinition *input)
- : MUnaryInstruction(input)
+ : MUnaryInstruction(input),
+ operandIsNeverNegativeInfinity_(false),
+ operandIsNeverNegativeZero_(false),
+ operandIsNeverNaN_(false)
{
setResultType(MIRType_Double);
setMovable();
@@ -3688,12 +3695,22 @@ class MPowHalf
bool congruentTo(MDefinition *ins) const {
return congruentIfOperandsEqual(ins);
}
+ bool operandIsNeverNegativeInfinity() const {
+ return operandIsNeverNegativeInfinity_;
+ }
+ bool operandIsNeverNegativeZero() const {
+ return operandIsNeverNegativeZero_;
+ }
+ bool operandIsNeverNaN() const {
+ return operandIsNeverNaN_;
+ }
TypePolicy *typePolicy() {
return this;
}
AliasSet getAliasSet() const {
return AliasSet::None();
}
+ void collectRangeInfo();
};
// Inline implementation of Math.random().
diff --git a/js/src/jit/RangeAnalysis.cpp b/js/src/jit/RangeAnalysis.cpp
index ff42cf3baea..79e33501b51 100644
--- a/js/src/jit/RangeAnalysis.cpp
+++ b/js/src/jit/RangeAnalysis.cpp
@@ -25,6 +25,7 @@ using mozilla::Abs;
using mozilla::CountLeadingZeroes32;
using mozilla::DoubleEqualsInt32;
using mozilla::ExponentComponent;
+using mozilla::FloorLog2;
using mozilla::IsInfinite;
using mozilla::IsFinite;
using mozilla::IsNaN;
@@ -284,6 +285,25 @@ SymbolicBound::print(Sprinter &sp) const
sum.print(sp);
}
+// Test whether the given range's exponent tells us anything that its lower
+// and upper bound values don't.
+static bool
+IsExponentInteresting(const Range *r)
+{
+ // If it lacks either a lower or upper bound, the exponent is interesting.
+ if (!r->hasInt32Bounds())
+ return true;
+
+ // Otherwise if there's no fractional part, the lower and upper bounds,
+ // which are integers, are perfectly precise.
+ if (!r->canHaveFractionalPart())
+ return false;
+
+ // Otherwise, if the bounds are conservatively rounded across a power-of-two
+ // boundary, the exponent may imply a tighter range.
+ return FloorLog2(Max(Abs(r->lower()), Abs(r->upper()))) > r->exponent();
+}
+
void
Range::print(Sprinter &sp) const
{
@@ -320,12 +340,14 @@ Range::print(Sprinter &sp) const
}
sp.printf("]");
- if (max_exponent_ == IncludesInfinityAndNaN)
- sp.printf(" (U inf U NaN)", max_exponent_);
- else if (max_exponent_ == IncludesInfinity)
- sp.printf(" (U inf)");
- else if (!hasInt32UpperBound_ || !hasInt32LowerBound_)
- sp.printf(" (< pow(2, %d+1))", max_exponent_);
+ if (IsExponentInteresting(this)) {
+ if (max_exponent_ == IncludesInfinityAndNaN)
+ sp.printf(" (U inf U NaN)", max_exponent_);
+ else if (max_exponent_ == IncludesInfinity)
+ sp.printf(" (U inf)");
+ else
+ sp.printf(" (< pow(2, %d+1))", max_exponent_);
+ }
}
void
@@ -390,11 +412,23 @@ Range::intersect(const Range *lhs, const Range *rhs, bool *emptyRange)
// than our newLower and newUpper. This is unusual, so we handle it here
// instead of in optimize().
//
- // For example, when the floating-point range has an actual maximum value
- // of 1.5, it may have a range like [0,2] and the max_exponent may be zero.
+ // For example, consider the range F[0,1.5]. Range analysis represents the
+ // lower and upper bound as integers, so we'd actually have
+ // F[0,2] (< pow(2, 0+1)). In this case, the exponent gives us a slightly
+ // more precise upper bound than the integer upper bound.
+ //
// When intersecting such a range with an integer range, the fractional part
- // of the range is dropped, but the max exponent of 0 remains valid.
- if (lhs->canHaveFractionalPart_ != rhs->canHaveFractionalPart_) {
+ // of the range is dropped. The max exponent of 0 remains valid, so the
+ // upper bound needs to be adjusted to 1.
+ //
+ // When intersecting F[0,2] (< pow(2, 0+1)) with a range like F[2,4],
+ // the naive intersection is I[2,2], but since the max exponent tells us
+ // that the value is always less than 2, the intersection is actually empty.
+ if (lhs->canHaveFractionalPart_ != rhs->canHaveFractionalPart_ ||
+ (lhs->canHaveFractionalPart_ &&
+ newHasInt32LowerBound && newHasInt32UpperBound &&
+ newLower == newUpper))
+ {
refineInt32BoundsByExponent(newExponent, &newLower, &newUpper);
// If we're intersecting two ranges that don't overlap, this could also
@@ -2424,3 +2458,13 @@ MNot::collectRangeInfo()
{
operandIsNeverNaN_ = !Range(operand()).canBeNaN();
}
+
+void
+MPowHalf::collectRangeInfo()
+{
+ Range inputRange(input());
+ operandIsNeverNegativeInfinity_ = !inputRange.canBeInfiniteOrNaN() ||
+ inputRange.hasInt32LowerBound();
+ operandIsNeverNegativeZero_ = !inputRange.canBeZero();
+ operandIsNeverNaN_ = !inputRange.canBeNaN();
+}
diff --git a/js/src/jit/RegisterAllocator.cpp b/js/src/jit/RegisterAllocator.cpp
index dc58cafd9d3..46347a77757 100644
--- a/js/src/jit/RegisterAllocator.cpp
+++ b/js/src/jit/RegisterAllocator.cpp
@@ -374,11 +374,16 @@ AllocationIntegrityState::dump()
for (size_t i = 0; i < block->numPhis(); i++) {
InstructionInfo &info = blocks[blockIndex].phis[i];
LPhi *phi = block->getPhi(i);
+ CodePosition output(phi->id(), CodePosition::OUTPUT);
- fprintf(stderr, "Phi v%u <-", info.outputs[0].virtualRegister());
+ // Don't print the inputOf for phi nodes, since it's never used.
+ fprintf(stderr, "[,%u Phi [def v%u %s] <-",
+ output.pos(),
+ info.outputs[0].virtualRegister(),
+ phi->getDef(0)->output()->toString());
for (size_t j = 0; j < phi->numOperands(); j++)
fprintf(stderr, " %s", info.inputs[j].toString());
- fprintf(stderr, "\n");
+ fprintf(stderr, "]\n");
}
for (LInstructionIterator iter = block->begin(); iter != block->end(); iter++) {
@@ -388,7 +393,10 @@ AllocationIntegrityState::dump()
CodePosition input(ins->id(), CodePosition::INPUT);
CodePosition output(ins->id(), CodePosition::OUTPUT);
- fprintf(stderr, "[%u,%u %s]", input.pos(), output.pos(), ins->opName());
+ fprintf(stderr, "[");
+ if (input != CodePosition::MIN)
+ fprintf(stderr, "%u,%u ", input.pos(), output.pos());
+ fprintf(stderr, "%s]", ins->opName());
if (ins->isMoveGroup()) {
LMoveGroup *group = ins->toMoveGroup();
diff --git a/js/src/jit/RegisterAllocator.h b/js/src/jit/RegisterAllocator.h
index e11ba14cda9..9a207c123b4 100644
--- a/js/src/jit/RegisterAllocator.h
+++ b/js/src/jit/RegisterAllocator.h
@@ -328,6 +328,8 @@ class RegisterAllocator
return CodePosition(pos, CodePosition::INPUT);
}
CodePosition inputOf(const LInstruction *ins) const {
+ // Phi nodes "use" their inputs before the beginning of the block.
+ JS_ASSERT(!ins->isPhi());
return CodePosition(ins->id(), CodePosition::INPUT);
}
@@ -341,17 +343,6 @@ class RegisterAllocator
return getMoveGroupAfter(pos.ins());
}
- size_t findFirstNonCallSafepoint(CodePosition from) const
- {
- size_t i = 0;
- for (; i < graph.numNonCallSafepoints(); i++) {
- const LInstruction *ins = graph.getNonCallSafepoint(i);
- if (from <= inputOf(ins))
- break;
- }
- return i;
- }
-
CodePosition minimalDefEnd(LInstruction *ins) {
// Compute the shortest interval that captures vregs defined by ins.
// Watch for instructions that are followed by an OSI point and/or Nop.
diff --git a/js/src/jit/TypeRepresentationSet.cpp b/js/src/jit/TypeRepresentationSet.cpp
index e7f56ce8de1..5f6207a9cff 100644
--- a/js/src/jit/TypeRepresentationSet.cpp
+++ b/js/src/jit/TypeRepresentationSet.cpp
@@ -162,20 +162,20 @@ TypeRepresentationSet::TypeRepresentationSet()
bool
TypeRepresentationSet::empty()
{
- return length() == 0;
+ return length_ == 0;
}
-size_t
-TypeRepresentationSet::length()
+bool
+TypeRepresentationSet::singleton()
{
- return length_;
+ return length_ == 1;
}
TypeRepresentation *
-TypeRepresentationSet::get(size_t i)
+TypeRepresentationSet::getTypeRepresentation()
{
- JS_ASSERT(i < length());
- return entries_[i];
+ JS_ASSERT(singleton());
+ return get(0);
}
bool
diff --git a/js/src/jit/TypeRepresentationSet.h b/js/src/jit/TypeRepresentationSet.h
index 556add84338..fbc7df521ac 100644
--- a/js/src/jit/TypeRepresentationSet.h
+++ b/js/src/jit/TypeRepresentationSet.h
@@ -55,6 +55,7 @@ class TypeRepresentationSetBuilder {
class TypeRepresentationSet {
private:
+ friend struct TypeRepresentationSetHasher;
friend class TypeRepresentationSetBuilder;
size_t length_;
@@ -62,6 +63,14 @@ class TypeRepresentationSet {
TypeRepresentationSet(size_t length, TypeRepresentation **entries);
+ size_t length() const {
+ return length_;
+ }
+
+ TypeRepresentation *get(uint32_t i) const {
+ return entries_[i];
+ }
+
public:
//////////////////////////////////////////////////////////////////////
// Constructors
@@ -76,8 +85,7 @@ class TypeRepresentationSet {
// Query the set
bool empty();
- size_t length();
- TypeRepresentation *get(size_t i);
+ bool singleton();
bool allOfKind(TypeRepresentation::Kind kind);
// Returns true only when non-empty and `kind()` is
@@ -99,6 +107,11 @@ class TypeRepresentationSet {
TypeRepresentation::Kind kind();
+ //////////////////////////////////////////////////////////////////////
+ // The following operations are only valid on a singleton set:
+
+ TypeRepresentation *getTypeRepresentation();
+
//////////////////////////////////////////////////////////////////////
// Array operations
//
diff --git a/js/src/jit/shared/CodeGenerator-x86-shared.cpp b/js/src/jit/shared/CodeGenerator-x86-shared.cpp
index a4d9df53ece..c34f24edb37 100644
--- a/js/src/jit/shared/CodeGenerator-x86-shared.cpp
+++ b/js/src/jit/shared/CodeGenerator-x86-shared.cpp
@@ -551,19 +551,29 @@ CodeGeneratorX86Shared::visitPowHalfD(LPowHalfD *ins)
Label done, sqrt;
- // Branch if not -Infinity.
- masm.loadConstantDouble(NegativeInfinity(), ScratchFloatReg);
- masm.branchDouble(Assembler::DoubleNotEqualOrUnordered, input, ScratchFloatReg, &sqrt);
+ if (!ins->mir()->operandIsNeverNegativeInfinity()) {
+ // Branch if not -Infinity.
+ masm.loadConstantDouble(NegativeInfinity(), ScratchFloatReg);
- // Math.pow(-Infinity, 0.5) == Infinity.
- masm.xorpd(input, input);
- masm.subsd(ScratchFloatReg, input);
- masm.jump(&done);
+ Assembler::DoubleCondition cond = Assembler::DoubleNotEqualOrUnordered;
+ if (ins->mir()->operandIsNeverNaN())
+ cond = Assembler::DoubleNotEqual;
+ masm.branchDouble(cond, input, ScratchFloatReg, &sqrt);
+
+ // Math.pow(-Infinity, 0.5) == Infinity.
+ masm.xorpd(input, input);
+ masm.subsd(ScratchFloatReg, input);
+ masm.jump(&done);
+
+ masm.bind(&sqrt);
+ }
+
+ if (!ins->mir()->operandIsNeverNegativeZero()) {
+ // Math.pow(-0, 0.5) == 0 == Math.pow(0, 0.5). Adding 0 converts any -0 to 0.
+ masm.xorpd(ScratchFloatReg, ScratchFloatReg);
+ masm.addsd(ScratchFloatReg, input);
+ }
- // Math.pow(-0, 0.5) == 0 == Math.pow(0, 0.5). Adding 0 converts any -0 to 0.
- masm.bind(&sqrt);
- masm.xorpd(ScratchFloatReg, ScratchFloatReg);
- masm.addsd(ScratchFloatReg, input);
masm.sqrtsd(input, input);
masm.bind(&done);
diff --git a/js/src/jit/shared/LIR-x86-shared.h b/js/src/jit/shared/LIR-x86-shared.h
index 6d4f8854d4e..e38e293d9ab 100644
--- a/js/src/jit/shared/LIR-x86-shared.h
+++ b/js/src/jit/shared/LIR-x86-shared.h
@@ -171,6 +171,9 @@ class LPowHalfD : public LInstructionHelper<1, 1, 0>
const LDefinition *output() {
return getDef(0);
}
+ MPowHalf *mir() const {
+ return mir_->toPowHalf();
+ }
};
// Takes a tableswitch with an integer to decide
diff --git a/js/src/jsopcode.cpp b/js/src/jsopcode.cpp
index 4449b332617..00f9eecb48c 100644
--- a/js/src/jsopcode.cpp
+++ b/js/src/jsopcode.cpp
@@ -1437,43 +1437,21 @@ js_QuoteString(ExclusiveContext *cx, JSString *str, jschar quote)
static JSObject *
GetBlockChainAtPC(JSContext *cx, JSScript *script, jsbytecode *pc)
{
- jsbytecode *start = script->main();
+ JS_ASSERT(pc >= script->main() && pc < script->code + script->length);
- JS_ASSERT(pc >= start && pc < script->code + script->length);
+ ptrdiff_t offset = pc - script->main();
+ if (!script->hasBlockScopes())
+ return nullptr;
+
+ BlockScopeArray *blockScopes = script->blockScopes();
JSObject *blockChain = nullptr;
- for (jsbytecode *p = start; p < pc; p += GetBytecodeLength(p)) {
- JSOp op = JSOp(*p);
-
- switch (op) {
- case JSOP_ENTERBLOCK:
- case JSOP_ENTERLET0:
- case JSOP_ENTERLET1:
- case JSOP_ENTERLET2: {
- JSObject *child = script->getObject(p);
- JS_ASSERT_IF(blockChain, child->as().stackDepth() >=
- blockChain->as().stackDepth());
- blockChain = child;
+ for (uint32_t n = 0; n < blockScopes->length; n++) {
+ const BlockScopeNote *note = &blockScopes->vector[n];
+ if (note->start > offset)
break;
- }
- case JSOP_LEAVEBLOCK:
- case JSOP_LEAVEBLOCKEXPR:
- case JSOP_LEAVEFORLETIN: {
- // Some LEAVEBLOCK instructions are due to early exits via
- // return/break/etc. from block-scoped loops and functions. We
- // should ignore these instructions, since they don't really signal
- // the end of the block.
- jssrcnote *sn = js_GetSrcNote(cx, script, p);
- if (!(sn && SN_TYPE(sn) == SRC_HIDDEN)) {
- JS_ASSERT(blockChain);
- blockChain = blockChain->as().enclosingBlock();
- JS_ASSERT_IF(blockChain, blockChain->is());
- }
- break;
- }
- default:
- break;
- }
+ if (offset <= note->start + note->length)
+ blockChain = script->getObject(note->index);
}
return blockChain;
diff --git a/js/src/jsscript.cpp b/js/src/jsscript.cpp
index b326f8db75f..67cc33d0dcb 100644
--- a/js/src/jsscript.cpp
+++ b/js/src/jsscript.cpp
@@ -416,7 +416,8 @@ js::XDRScript(XDRState *xdr, HandleObject enclosingScope, HandleScript enc
};
uint32_t length, lineno, nslots;
- uint32_t natoms, nsrcnotes, ntrynotes, nobjects, nregexps, nconsts, i;
+ uint32_t natoms, nsrcnotes, i;
+ uint32_t nconsts, nobjects, nregexps, ntrynotes, nblockscopes;
uint32_t prologLength, version;
uint32_t funLength = 0;
uint32_t nTypeSets = 0;
@@ -424,7 +425,8 @@ js::XDRScript(XDRState *xdr, HandleObject enclosingScope, HandleScript enc
JSContext *cx = xdr->cx();
RootedScript script(cx);
- nsrcnotes = ntrynotes = natoms = nobjects = nregexps = nconsts = 0;
+ natoms = nsrcnotes = 0;
+ nconsts = nobjects = nregexps = ntrynotes = nblockscopes = 0;
/* XDR arguments and vars. */
uint16_t nargs = 0, nvars = 0;
@@ -468,6 +470,8 @@ js::XDRScript(XDRState *xdr, HandleObject enclosingScope, HandleScript enc
nregexps = script->regexps()->length;
if (script->hasTrynotes())
ntrynotes = script->trynotes()->length;
+ if (script->hasBlockScopes())
+ nblockscopes = script->blockScopes()->length;
nTypeSets = script->nTypeSets;
funLength = script->funLength;
@@ -512,21 +516,20 @@ js::XDRScript(XDRState *xdr, HandleObject enclosingScope, HandleScript enc
if (!xdr->codeUint32(&version))
return false;
- /*
- * To fuse allocations, we need srcnote, atom, objects, regexp, and trynote
- * counts early.
- */
+ // To fuse allocations, we need lengths of all embedded arrays early.
if (!xdr->codeUint32(&natoms))
return false;
if (!xdr->codeUint32(&nsrcnotes))
return false;
- if (!xdr->codeUint32(&ntrynotes))
+ if (!xdr->codeUint32(&nconsts))
return false;
if (!xdr->codeUint32(&nobjects))
return false;
if (!xdr->codeUint32(&nregexps))
return false;
- if (!xdr->codeUint32(&nconsts))
+ if (!xdr->codeUint32(&ntrynotes))
+ return false;
+ if (!xdr->codeUint32(&nblockscopes))
return false;
if (!xdr->codeUint32(&nTypeSets))
return false;
@@ -569,8 +572,11 @@ js::XDRScript(XDRState *xdr, HandleObject enclosingScope, HandleScript enc
return false;
if (mode == XDR_DECODE) {
- if (!JSScript::partiallyInit(cx, script, nobjects, nregexps, ntrynotes, nconsts, nTypeSets))
+ if (!JSScript::partiallyInit(cx, script, nconsts, nobjects, nregexps, ntrynotes,
+ nblockscopes, nTypeSets))
+ {
return false;
+ }
JS_ASSERT(!script->mainOffset);
script->mainOffset = prologLength;
@@ -664,6 +670,14 @@ js::XDRScript(XDRState *xdr, HandleObject enclosingScope, HandleScript enc
return false;
}
+ if (nconsts) {
+ HeapValue *vector = script->consts()->vector;
+ for (i = 0; i != nconsts; ++i) {
+ if (!XDRScriptConst(xdr, &vector[i]))
+ return false;
+ }
+ }
+
/*
* Here looping from 0-to-length to xdr objects is essential to ensure that
* all references to enclosing blocks (via FindBlockIndex below) happen
@@ -740,6 +754,7 @@ js::XDRScript(XDRState *xdr, HandleObject enclosingScope, HandleScript enc
*objp = tmp;
}
}
+
for (i = 0; i != nregexps; ++i) {
if (!XDRScriptRegExpObject(xdr, &script->regexps()->vector[i]))
return false;
@@ -776,11 +791,13 @@ js::XDRScript(XDRState *xdr, HandleObject enclosingScope, HandleScript enc
} while (tn != tnfirst);
}
- if (nconsts) {
- HeapValue *vector = script->consts()->vector;
- for (i = 0; i != nconsts; ++i) {
- if (!XDRScriptConst(xdr, &vector[i]))
- return false;
+ for (i = 0; i < nblockscopes; ++i) {
+ BlockScopeNote *note = &script->blockScopes()->vector[i];
+ if (!xdr->codeUint32(¬e->index) ||
+ !xdr->codeUint32(¬e->start) ||
+ !xdr->codeUint32(¬e->length))
+ {
+ return false;
}
}
@@ -1580,6 +1597,7 @@ js::FreeScriptData(JSRuntime *rt)
* ObjectArray Objects objects()
* ObjectArray Regexps regexps()
* TryNoteArray Try notes trynotes()
+ * BlockScopeArray Scope notes blockScopes()
*
* Then are the elements of several arrays.
* - Most of these arrays have headers listed above (if present). For each of
@@ -1595,6 +1613,7 @@ js::FreeScriptData(JSRuntime *rt)
* Objects objects()->vector objects()->length
* Regexps regexps()->vector regexps()->length
* Try notes trynotes()->vector trynotes()->length
+ * Scope notes blockScopes()->vector blockScopes()->length
*
* IMPORTANT: This layout has two key properties.
* - It ensures that everything has sufficient alignment; in particular, the
@@ -1640,6 +1659,7 @@ js::FreeScriptData(JSRuntime *rt)
JS_STATIC_ASSERT(KEEPS_JSVAL_ALIGNMENT(ConstArray));
JS_STATIC_ASSERT(KEEPS_JSVAL_ALIGNMENT(ObjectArray)); /* there are two of these */
JS_STATIC_ASSERT(KEEPS_JSVAL_ALIGNMENT(TryNoteArray));
+JS_STATIC_ASSERT(KEEPS_JSVAL_ALIGNMENT(BlockScopeArray));
/* These assertions ensure there is no padding required between array elements. */
JS_STATIC_ASSERT(HAS_JSVAL_ALIGNMENT(HeapValue));
@@ -1649,9 +1669,15 @@ JS_STATIC_ASSERT(NO_PADDING_BETWEEN_ENTRIES(HeapPtrObject, JSTryNote));
JS_STATIC_ASSERT(NO_PADDING_BETWEEN_ENTRIES(JSTryNote, uint32_t));
JS_STATIC_ASSERT(NO_PADDING_BETWEEN_ENTRIES(uint32_t, uint32_t));
+JS_STATIC_ASSERT(NO_PADDING_BETWEEN_ENTRIES(HeapValue, BlockScopeNote));
+JS_STATIC_ASSERT(NO_PADDING_BETWEEN_ENTRIES(BlockScopeNote, BlockScopeNote));
+JS_STATIC_ASSERT(NO_PADDING_BETWEEN_ENTRIES(JSTryNote, BlockScopeNote));
+JS_STATIC_ASSERT(NO_PADDING_BETWEEN_ENTRIES(HeapPtrObject, BlockScopeNote));
+JS_STATIC_ASSERT(NO_PADDING_BETWEEN_ENTRIES(BlockScopeNote, uint32_t));
+
static inline size_t
-ScriptDataSize(uint32_t nbindings, uint32_t nobjects, uint32_t nregexps,
- uint32_t ntrynotes, uint32_t nconsts)
+ScriptDataSize(uint32_t nbindings, uint32_t nconsts, uint32_t nobjects, uint32_t nregexps,
+ uint32_t ntrynotes, uint32_t nblockscopes)
{
size_t size = 0;
@@ -1663,6 +1689,8 @@ ScriptDataSize(uint32_t nbindings, uint32_t nobjects, uint32_t nregexps,
size += sizeof(ObjectArray) + nregexps * sizeof(JSObject *);
if (ntrynotes != 0)
size += sizeof(TryNoteArray) + ntrynotes * sizeof(JSTryNote);
+ if (nblockscopes != 0)
+ size += sizeof(BlockScopeArray) + nblockscopes * sizeof(BlockScopeNote);
if (nbindings != 0) {
// Make sure bindings are sufficiently aligned.
@@ -1736,10 +1764,12 @@ AllocScriptData(ExclusiveContext *cx, size_t size)
}
/* static */ bool
-JSScript::partiallyInit(ExclusiveContext *cx, HandleScript script, uint32_t nobjects,
- uint32_t nregexps, uint32_t ntrynotes, uint32_t nconsts, uint32_t nTypeSets)
+JSScript::partiallyInit(ExclusiveContext *cx, HandleScript script, uint32_t nconsts,
+ uint32_t nobjects, uint32_t nregexps, uint32_t ntrynotes,
+ uint32_t nblockscopes, uint32_t nTypeSets)
{
- size_t size = ScriptDataSize(script->bindings.count(), nobjects, nregexps, ntrynotes, nconsts);
+ size_t size = ScriptDataSize(script->bindings.count(), nconsts, nobjects, nregexps, ntrynotes,
+ nblockscopes);
script->data = AllocScriptData(cx, size);
if (!script->data)
return false;
@@ -1765,6 +1795,10 @@ JSScript::partiallyInit(ExclusiveContext *cx, HandleScript script, uint32_t nobj
script->setHasArray(TRYNOTES);
cursor += sizeof(TryNoteArray);
}
+ if (nblockscopes != 0) {
+ script->setHasArray(BLOCK_SCOPES);
+ cursor += sizeof(BlockScopeArray);
+ }
if (nconsts != 0) {
JS_ASSERT(reinterpret_cast(cursor) % sizeof(jsval) == 0);
@@ -1795,6 +1829,16 @@ JSScript::partiallyInit(ExclusiveContext *cx, HandleScript script, uint32_t nobj
cursor += vectorSize;
}
+ if (nblockscopes != 0) {
+ script->blockScopes()->length = nblockscopes;
+ script->blockScopes()->vector = reinterpret_cast(cursor);
+ size_t vectorSize = nblockscopes * sizeof(script->blockScopes()->vector[0]);
+#ifdef DEBUG
+ memset(cursor, 0, vectorSize);
+#endif
+ cursor += vectorSize;
+ }
+
if (script->bindings.count() != 0) {
// Make sure bindings are sufficiently aligned.
cursor = reinterpret_cast
@@ -1809,7 +1853,7 @@ JSScript::partiallyInit(ExclusiveContext *cx, HandleScript script, uint32_t nobj
/* static */ bool
JSScript::fullyInitTrivial(ExclusiveContext *cx, Handle script)
{
- if (!partiallyInit(cx, script, 0, 0, 0, 0, 0))
+ if (!partiallyInit(cx, script, 0, 0, 0, 0, 0, 0))
return false;
SharedScriptData *ssd = SharedScriptData::new_(cx, 1, 1, 0);
@@ -1835,8 +1879,8 @@ JSScript::fullyInitFromEmitter(ExclusiveContext *cx, HandleScript script, Byteco
uint32_t nsrcnotes = uint32_t(bce->countFinalSourceNotes());
uint32_t natoms = bce->atomIndices->count();
if (!partiallyInit(cx, script,
- bce->objectList.length, bce->regexpList.length, bce->tryNoteList.length(),
- bce->constList.length(), bce->typesetCount))
+ bce->constList.length(), bce->objectList.length, bce->regexpList.length,
+ bce->tryNoteList.length(), bce->blockScopeList.length(), bce->typesetCount))
{
return false;
}
@@ -1873,14 +1917,16 @@ JSScript::fullyInitFromEmitter(ExclusiveContext *cx, HandleScript script, Byteco
FunctionBox *funbox = bce->sc->isFunctionBox() ? bce->sc->asFunctionBox() : nullptr;
- if (bce->tryNoteList.length() != 0)
- bce->tryNoteList.finish(script->trynotes());
+ if (bce->constList.length() != 0)
+ bce->constList.finish(script->consts());
if (bce->objectList.length != 0)
bce->objectList.finish(script->objects());
if (bce->regexpList.length != 0)
bce->regexpList.finish(script->regexps());
- if (bce->constList.length() != 0)
- bce->constList.finish(script->consts());
+ if (bce->tryNoteList.length() != 0)
+ bce->tryNoteList.finish(script->trynotes());
+ if (bce->blockScopeList.length() != 0)
+ bce->blockScopeList.finish(script->blockScopes());
script->strict = bce->sc->strict;
script->explicitUseStrict = bce->sc->hasExplicitUseStrict();
script->bindingsAccessedDynamically = bce->sc->bindingsAccessedDynamically();
@@ -2279,6 +2325,7 @@ js::CloneScript(JSContext *cx, HandleObject enclosingScope, HandleFunction fun,
uint32_t nobjects = src->hasObjects() ? src->objects()->length : 0;
uint32_t nregexps = src->hasRegexps() ? src->regexps()->length : 0;
uint32_t ntrynotes = src->hasTrynotes() ? src->trynotes()->length : 0;
+ uint32_t nblockscopes = src->hasBlockScopes() ? src->blockScopes()->length : 0;
/* Script data */
@@ -2444,6 +2491,8 @@ js::CloneScript(JSContext *cx, HandleObject enclosingScope, HandleFunction fun,
}
if (ntrynotes != 0)
dst->trynotes()->vector = Rebase(dst, src, src->trynotes()->vector);
+ if (nblockscopes != 0)
+ dst->blockScopes()->vector = Rebase(dst, src, src->blockScopes()->vector);
return dst;
}
diff --git a/js/src/jsscript.h b/js/src/jsscript.h
index ea762a95e6c..21e00a1af31 100644
--- a/js/src/jsscript.h
+++ b/js/src/jsscript.h
@@ -81,19 +81,31 @@ struct JSTryNote {
namespace js {
+struct BlockScopeNote {
+ uint32_t index; // Index of StaticScopeObject in the object array.
+ uint32_t start; // Bytecode offset at which this scope starts.
+ uint32_t length; // Bytecode length of scope.
+ uint32_t padding; // Pad to 64-bit boundary.
+};
+
struct ConstArray {
js::HeapValue *vector; /* array of indexed constant values */
uint32_t length;
};
struct ObjectArray {
- js::HeapPtrObject *vector; /* array of indexed objects */
- uint32_t length; /* count of indexed objects */
+ js::HeapPtrObject *vector; // Array of indexed objects.
+ uint32_t length; // Count of indexed objects.
};
struct TryNoteArray {
- JSTryNote *vector; /* array of indexed try notes */
- uint32_t length; /* count of indexed try notes */
+ JSTryNote *vector; // Array of indexed try notes.
+ uint32_t length; // Count of indexed try notes.
+};
+
+struct BlockScopeArray {
+ BlockScopeNote *vector; // Array of indexed BlockScopeNote records.
+ uint32_t length; // Count of indexed try notes.
};
/*
@@ -552,6 +564,7 @@ class JSScript : public js::gc::BarrieredCell
OBJECTS,
REGEXPS,
TRYNOTES,
+ BLOCK_SCOPES,
ARRAY_KIND_BITS
};
@@ -564,7 +577,7 @@ class JSScript : public js::gc::BarrieredCell
uint8_t generatorKindBits_:2;
// Unused padding; feel free to steal these if you need them.
- uint8_t padToByte_:2;
+ uint8_t padToByte_:1;
// 1-bit fields.
@@ -650,8 +663,9 @@ class JSScript : public js::gc::BarrieredCell
// successfully creating any kind (function or other) of new JSScript.
// However, callers of fullyInitFromEmitter() do not need to do this.
static bool partiallyInit(js::ExclusiveContext *cx, JS::Handle script,
- uint32_t nobjects, uint32_t nregexps,
- uint32_t ntrynotes, uint32_t nconsts, uint32_t nTypeSets);
+ uint32_t nconsts, uint32_t nobjects, uint32_t nregexps,
+ uint32_t ntrynotes, uint32_t nblockscopes,
+ uint32_t nTypeSets);
static bool fullyInitFromEmitter(js::ExclusiveContext *cx, JS::Handle script,
js::frontend::BytecodeEmitter *bce);
// Initialize a no-op script.
@@ -913,6 +927,7 @@ class JSScript : public js::gc::BarrieredCell
bool hasObjects() { return hasArray(OBJECTS); }
bool hasRegexps() { return hasArray(REGEXPS); }
bool hasTrynotes() { return hasArray(TRYNOTES); }
+ bool hasBlockScopes() { return hasArray(BLOCK_SCOPES); }
#define OFF(fooOff, hasFoo, t) (fooOff() + (hasFoo() ? sizeof(t) : 0))
@@ -920,6 +935,7 @@ class JSScript : public js::gc::BarrieredCell
size_t objectsOffset() { return OFF(constsOffset, hasConsts, js::ConstArray); }
size_t regexpsOffset() { return OFF(objectsOffset, hasObjects, js::ObjectArray); }
size_t trynotesOffset() { return OFF(regexpsOffset, hasRegexps, js::ObjectArray); }
+ size_t blockScopesOffset(){ return OFF(trynotesOffset, hasTrynotes, js::TryNoteArray); }
js::ConstArray *consts() {
JS_ASSERT(hasConsts());
@@ -941,6 +957,11 @@ class JSScript : public js::gc::BarrieredCell
return reinterpret_cast(data + trynotesOffset());
}
+ js::BlockScopeArray *blockScopes() {
+ JS_ASSERT(hasBlockScopes());
+ return reinterpret_cast(data + blockScopesOffset());
+ }
+
bool hasLoops();
js::HeapPtrAtom &getAtom(size_t index) const {
diff --git a/js/src/shell/js.cpp b/js/src/shell/js.cpp
index b93db5b9322..a76968824d7 100644
--- a/js/src/shell/js.cpp
+++ b/js/src/shell/js.cpp
@@ -5796,6 +5796,10 @@ main(int argc, char **argv, char **envp)
"(default: 10)", -1)
|| !op.addBoolOption('\0', "no-fpu", "Pretend CPU does not support floating-point operations "
"to test JIT codegen (no-op on platforms other than x86).")
+ || !op.addBoolOption('\0', "no-sse3", "Pretend CPU does not support SSE3 instructions and above "
+ "to test JIT codegen (no-op on platforms other than x86 and x64).")
+ || !op.addBoolOption('\0', "no-sse4", "Pretend CPU does not support SSE4 instructions"
+ "to test JIT codegen (no-op on platforms other than x86 and x64).")
|| !op.addBoolOption('\0', "fuzzing-safe", "Don't expose functions that aren't safe for "
"fuzzers to call")
#ifdef DEBUG
@@ -5840,6 +5844,17 @@ main(int argc, char **argv, char **envp)
if (op.getBoolOption("no-fpu"))
JSC::MacroAssembler::SetFloatingPointDisabled();
#endif
+
+#if (defined(JS_CPU_X86) || defined(JS_CPU_X64)) && defined(JS_ION)
+ if (op.getBoolOption("no-sse3")) {
+ JSC::MacroAssembler::SetSSE3Disabled();
+ PropagateFlagToNestedShells("--no-sse3");
+ }
+ if (op.getBoolOption("no-sse4")) {
+ JSC::MacroAssembler::SetSSE4Disabled();
+ PropagateFlagToNestedShells("--no-sse4");
+ }
+#endif
#endif
// Start the engine.
diff --git a/js/src/tests/ecma_6/TypedObject/redimension.js b/js/src/tests/ecma_6/TypedObject/redimension.js
new file mode 100644
index 00000000000..4d250da8684
--- /dev/null
+++ b/js/src/tests/ecma_6/TypedObject/redimension.js
@@ -0,0 +1,61 @@
+// |reftest| skip-if(!this.hasOwnProperty("TypedObject"))
+var BUGNUMBER = 922172;
+var summary = 'redimension method';
+
+/*
+ * Any copyright is dedicated to the Public Domain.
+ * http://creativecommons.org/licenses/publicdomain/
+ */
+
+var T = TypedObject;
+
+function runTests() {
+ var counter;
+
+ // create an array of 40 bytes with some initial data
+ var Bytes40 = new T.ArrayType(T.uint8, 40);
+ var bytes40 = new Bytes40();
+ for (var i = 0, counter = 0; i < 40; i++)
+ bytes40[i] = counter++;
+
+ // redimension to an array of 10x4 bytes, check data is unchanged
+ var Bytes10times4 = new T.ArrayType(new T.ArrayType(T.uint8, 4), 10);
+ var bytes10times4 = bytes40.redimension(Bytes10times4);
+ counter = 0;
+ for (var i = 0; i < 10; i++)
+ for (var j = 0; j < 4; j++)
+ assertEq(counter++, bytes10times4[i][j]);
+
+ // redimension to an array of 2x5x2x2, check data is unchanged
+ var Bytes2times5times2times2 =
+ new T.ArrayType(
+ new T.ArrayType(
+ new T.ArrayType(
+ new T.ArrayType(T.uint8, 2), 2), 5), 2);
+ var bytes2times5times2times2 = bytes10times4.redimension(Bytes2times5times2times2);
+ counter = 0;
+ for (var i = 0; i < 2; i++)
+ for (var j = 0; j < 5; j++)
+ for (var k = 0; k < 2; k++)
+ for (var l = 0; l < 2; l++)
+ assertEq(counter++, bytes2times5times2times2[i][j][k][l]);
+
+ // test what happens if number of elements does not match
+ assertThrowsInstanceOf(() => {
+ var Bytes10times5 = new T.ArrayType(new T.ArrayType(T.uint8, 5), 10);
+ bytes40.redimension(Bytes10times5);
+ }, TypeError, "New number of elements does not match old number of elements");
+
+ // test what happens if inner type does not match, even if size is the same
+ assertThrowsInstanceOf(() => {
+ var Words40 = new T.ArrayType(T.uint8Clamped, 40);
+ bytes40.redimension(Words40);
+ }, TypeError, "New element type is not equivalent to old element type");
+
+ reportCompare(true, true);
+ print("Tests complete");
+}
+
+runTests();
+
+
diff --git a/js/src/vm/Interpreter.cpp b/js/src/vm/Interpreter.cpp
index 3aeeadb0e0e..eccc54332c6 100644
--- a/js/src/vm/Interpreter.cpp
+++ b/js/src/vm/Interpreter.cpp
@@ -1660,7 +1660,7 @@ CASE(JSOP_RETRVAL)
if (!REGS.fp()->isYielding())
REGS.fp()->epilogue(cx);
else
- probes::ExitScript(cx, script, script->function(), REGS.fp());
+ probes::ExitScript(cx, script, script->function(), REGS.fp()->hasPushedSPSFrame());
#if defined(JS_ION)
jit_return_pop_frame:
@@ -3437,7 +3437,7 @@ DEFAULT()
if (!REGS.fp()->isYielding())
REGS.fp()->epilogue(cx);
else
- probes::ExitScript(cx, script, script->function(), REGS.fp());
+ probes::ExitScript(cx, script, script->function(), REGS.fp()->hasPushedSPSFrame());
gc::MaybeVerifyBarriers(cx, true);
diff --git a/js/src/vm/Probes-inl.h b/js/src/vm/Probes-inl.h
index a252ea7ab49..3d12c2b3cc0 100644
--- a/js/src/vm/Probes-inl.h
+++ b/js/src/vm/Probes-inl.h
@@ -63,8 +63,7 @@ probes::EnterScript(JSContext *cx, JSScript *script, JSFunction *maybeFun,
}
inline bool
-probes::ExitScript(JSContext *cx, JSScript *script, JSFunction *maybeFun,
- AbstractFramePtr fp)
+probes::ExitScript(JSContext *cx, JSScript *script, JSFunction *maybeFun, bool popSPSFrame)
{
bool ok = true;
@@ -76,22 +75,10 @@ probes::ExitScript(JSContext *cx, JSScript *script, JSFunction *maybeFun,
cx->doFunctionCallback(maybeFun, script, 0);
#endif
- JSRuntime *rt = cx->runtime();
- /*
- * Coming from IonMonkey, the fp might not be known (fp == nullptr), but
- * IonMonkey will only call exitScript() when absolutely necessary, so it is
- * guaranteed that fp->hasPushedSPSFrame() would have been true
- */
- if ((!fp && rt->spsProfiler.enabled()) || (fp && fp.hasPushedSPSFrame()))
- rt->spsProfiler.exit(cx, script, maybeFun);
- return ok;
-}
+ if (popSPSFrame)
+ cx->runtime()->spsProfiler.exit(cx, script, maybeFun);
-inline bool
-probes::ExitScript(JSContext *cx, JSScript *script, JSFunction *maybeFun,
- StackFrame *fp)
-{
- return probes::ExitScript(cx, script, maybeFun, fp ? AbstractFramePtr(fp) : AbstractFramePtr());
+ return ok;
}
inline bool
diff --git a/js/src/vm/Probes.h b/js/src/vm/Probes.h
index d8c60adf34d..1a67f98fa2d 100644
--- a/js/src/vm/Probes.h
+++ b/js/src/vm/Probes.h
@@ -69,8 +69,7 @@ bool WantNativeAddressInfo(JSContext *);
bool EnterScript(JSContext *, JSScript *, JSFunction *, StackFrame *);
/* About to leave a JS function */
-bool ExitScript(JSContext *, JSScript *, JSFunction *, AbstractFramePtr);
-bool ExitScript(JSContext *, JSScript *, JSFunction *, StackFrame *);
+bool ExitScript(JSContext *, JSScript *, JSFunction *, bool popSPSFrame);
/* Executing a script */
bool StartExecution(JSScript *script);
diff --git a/js/src/vm/Stack.cpp b/js/src/vm/Stack.cpp
index e92bca1ace4..53cc3c47300 100644
--- a/js/src/vm/Stack.cpp
+++ b/js/src/vm/Stack.cpp
@@ -300,7 +300,7 @@ StackFrame::epilogue(JSContext *cx)
JS_ASSERT(!hasBlockChain());
RootedScript script(cx, this->script());
- probes::ExitScript(cx, script, script->function(), this);
+ probes::ExitScript(cx, script, script->function(), hasPushedSPSFrame());
if (isEvalFrame()) {
if (isStrictEvalFrame()) {
diff --git a/js/src/vm/Xdr.h b/js/src/vm/Xdr.h
index a587d5c0ed2..ec08bc4e4f5 100644
--- a/js/src/vm/Xdr.h
+++ b/js/src/vm/Xdr.h
@@ -22,7 +22,7 @@ namespace js {
* and saved versions. If deserialization fails, the data should be
* invalidated if possible.
*/
-static const uint32_t XDR_BYTECODE_VERSION = uint32_t(0xb973c0de - 153);
+static const uint32_t XDR_BYTECODE_VERSION = uint32_t(0xb973c0de - 154);
class XDRBuffer {
public:
diff --git a/js/xpconnect/shell/xpcshell.cpp b/js/xpconnect/shell/xpcshell.cpp
index 327f84b44ee..1fac33fe90b 100644
--- a/js/xpconnect/shell/xpcshell.cpp
+++ b/js/xpconnect/shell/xpcshell.cpp
@@ -10,6 +10,7 @@
#include
#include "mozilla/Util.h"
+#include "mozilla/WindowsDllBlocklist.h"
#include "nsXULAppAPI.h"
#ifdef XP_MACOSX
@@ -38,8 +39,8 @@ main(int argc, char** argv, char** envp)
setbuf(stdout, 0);
#endif
-#ifdef XRE_HAS_DLL_BLOCKLIST
- XRE_SetupDllBlocklist();
+#ifdef HAS_DLL_BLOCKLIST
+ DllBlocklist_Initialize();
#endif
int result = XRE_XPCShellMain(argc, argv, envp);
diff --git a/layout/base/crashtests/806056-1.html b/layout/base/crashtests/806056-1.html
new file mode 100644
index 00000000000..7472bac74a9
--- /dev/null
+++ b/layout/base/crashtests/806056-1.html
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
+
diff --git a/layout/base/crashtests/806056-2.html b/layout/base/crashtests/806056-2.html
new file mode 100644
index 00000000000..c0fd20fecec
--- /dev/null
+++ b/layout/base/crashtests/806056-2.html
@@ -0,0 +1,18 @@
+
+
+
+
+
+
+
+
+
diff --git a/layout/base/crashtests/crashtests.list b/layout/base/crashtests/crashtests.list
index 762f5d05790..d0abf1c223f 100644
--- a/layout/base/crashtests/crashtests.list
+++ b/layout/base/crashtests/crashtests.list
@@ -403,6 +403,8 @@ load 788360.html
load 793848.html
load 795646.html
skip-if(1) load 802902.html # bug 901752
+load 806056-1.html
+load 806056-2.html
load 813372-1.html
asserts-if(gtk2Widget,0-1) load 822865.html # bug 540078
load 833604-1.html
diff --git a/layout/base/nsPresShell.cpp b/layout/base/nsPresShell.cpp
index a0665d4762f..841a9b776a2 100644
--- a/layout/base/nsPresShell.cpp
+++ b/layout/base/nsPresShell.cpp
@@ -3455,6 +3455,9 @@ PresShell::DispatchSynthMouseMove(WidgetGUIEvent* aEvent,
if (!targetView)
return;
targetView->GetViewManager()->DispatchEvent(aEvent, targetView, &status);
+ if (MOZ_UNLIKELY(mIsDestroying)) {
+ return;
+ }
if (aFlushOnHoverChange &&
hoverGenerationBefore != restyleManager->GetHoverGeneration()) {
// Flush so that the resulting reflow happens now so that our caller
diff --git a/layout/base/nsPresShell.h b/layout/base/nsPresShell.h
index 0e6e3bd3705..cb6e2791a3b 100644
--- a/layout/base/nsPresShell.h
+++ b/layout/base/nsPresShell.h
@@ -600,8 +600,10 @@ protected:
}
}
virtual void WillRefresh(mozilla::TimeStamp aTime) MOZ_OVERRIDE {
- if (mPresShell)
- mPresShell->ProcessSynthMouseMoveEvent(mFromScroll);
+ if (mPresShell) {
+ nsRefPtr shell = mPresShell;
+ shell->ProcessSynthMouseMoveEvent(mFromScroll);
+ }
}
private:
PresShell* mPresShell;
diff --git a/layout/reftests/bugs/388367-1.html b/layout/generic/crashtests/388367-1.html
similarity index 100%
rename from layout/reftests/bugs/388367-1.html
rename to layout/generic/crashtests/388367-1.html
diff --git a/layout/generic/crashtests/463785.xhtml b/layout/generic/crashtests/463785.xhtml
new file mode 100644
index 00000000000..befeaf8fdd3
--- /dev/null
+++ b/layout/generic/crashtests/463785.xhtml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/layout/generic/crashtests/489477.html b/layout/generic/crashtests/489477.html
new file mode 100644
index 00000000000..34ef7362600
--- /dev/null
+++ b/layout/generic/crashtests/489477.html
@@ -0,0 +1,21 @@
+
+
+
+
+
+
+
+
diff --git a/layout/generic/crashtests/537645.xhtml b/layout/generic/crashtests/537645.xhtml
new file mode 100644
index 00000000000..de3123dc951
--- /dev/null
+++ b/layout/generic/crashtests/537645.xhtml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
diff --git a/layout/generic/crashtests/654002-1.html b/layout/generic/crashtests/654002-1.html
new file mode 100644
index 00000000000..b96b0ef35cd
--- /dev/null
+++ b/layout/generic/crashtests/654002-1.html
@@ -0,0 +1,24 @@
+
+
+
+ Testcase for bug 654002
+
+
+
+
+
+
+
+
diff --git a/layout/generic/crashtests/654002-2.html b/layout/generic/crashtests/654002-2.html
new file mode 100644
index 00000000000..28f820d99bd
--- /dev/null
+++ b/layout/generic/crashtests/654002-2.html
@@ -0,0 +1,26 @@
+
+
+
+
+
+
+
+
diff --git a/layout/generic/crashtests/777838.html b/layout/generic/crashtests/777838.html
new file mode 100644
index 00000000000..02aadfe5664
--- /dev/null
+++ b/layout/generic/crashtests/777838.html
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
+
+
diff --git a/layout/generic/crashtests/784600.html b/layout/generic/crashtests/784600.html
new file mode 100644
index 00000000000..8706877121e
--- /dev/null
+++ b/layout/generic/crashtests/784600.html
@@ -0,0 +1,17 @@
+>>
diff --git a/layout/generic/crashtests/crashtests.list b/layout/generic/crashtests/crashtests.list
index 8eb981531ac..6e8eec41e30 100644
--- a/layout/generic/crashtests/crashtests.list
+++ b/layout/generic/crashtests/crashtests.list
@@ -136,6 +136,7 @@ load 387233-1.html
load 387233-2.html
load 387282-1.html
load 388175-1.html
+load 388367-1.html
load 388709-1.html
load 389635-1.html
load 390050-1.html
@@ -169,7 +170,7 @@ load 398322-1.html
load 398322-2.html
load 398332-1.html
load 398332-2.html
-asserts(2) load 398332-3.html # bug 436123 and bug 457397
+asserts(0-2) load 398332-3.html # bug 436123 and bug 457397
load 399407-1.xhtml
load 399412-1.html
load 399843-1.html
@@ -302,6 +303,7 @@ load 463350-1.html
load 463350-2.html
load 463350-3.html
load 463741-1.html
+load 463785.xhtml
load 465651-1.html
load 467137-1.html
load 467213-1.html
@@ -331,6 +333,7 @@ asserts-if(!Android,1) load 479938-1.html # Bug 575011
load 480345-1.html
skip-if(Android) load 481921.html
load 489462-1.html
+load 489477.html
load 489480-1.xhtml
load 493111-1.html
load 493118-1.html
@@ -373,6 +376,7 @@ load 534082-1.html
load 534366-1.html
load 534366-2.html
load 536692-1.xhtml
+load 537645.xhtml
load 541277-1.html
load 541277-2.html
load 541714-1.html
@@ -421,6 +425,8 @@ load 646561-1.html
load 646983-1.html
load 647332-1.html
load 650499-1.html
+load 654002-1.html
+load 654002-2.html
load 655462-1.html
load 656130-1.html
load 656130-2.html
@@ -464,6 +470,8 @@ asserts(0-200) load 767765.html # bug 407550, bug 871758, and various nscoord_MA
load 769303-1.html
load 769303-2.html
load 769120.html
+load 777838.html
+load 784600.html
load 786740-1.html
asserts(0-4) test-pref(font.size.inflation.emPerLine,15) load 791601.xhtml # 3 counts of bug 871327, 1 bug 367185
test-pref(font.size.inflation.minTwips,120) load 794693.html
diff --git a/layout/generic/crashtests/simple_blank.swf b/layout/generic/crashtests/simple_blank.swf
new file mode 100644
index 00000000000..b846387eb8b
Binary files /dev/null and b/layout/generic/crashtests/simple_blank.swf differ
diff --git a/layout/reftests/bugs/reftest.list b/layout/reftests/bugs/reftest.list
index d138713d48b..456882a5176 100644
--- a/layout/reftests/bugs/reftest.list
+++ b/layout/reftests/bugs/reftest.list
@@ -758,7 +758,6 @@ fails == 387344-1.html 387344-1-ref.html # scrolling rowgroups were removed in b
== 387876-3a.html 387876-3-ref.html
== 387876-3b.html 387876-3-ref.html
== 388026-1.html 388026-1-ref.html
-== 388367-1.html about:blank
== 389074-1.html 389074-1-ref.html
== 389224-1.html 389224-1-ref.html
== 389224-2.html about:blank
diff --git a/media/webrtc/trunk/build/mac/find_sdk.py b/media/webrtc/trunk/build/mac/find_sdk.py
index 067be638d21..ca58284eacd 100755
--- a/media/webrtc/trunk/build/mac/find_sdk.py
+++ b/media/webrtc/trunk/build/mac/find_sdk.py
@@ -34,30 +34,33 @@ def main():
(options, args) = parser.parse_args()
min_sdk_version = args[0]
- job = subprocess.Popen(['xcode-select', '-print-path'],
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT)
- out, err = job.communicate()
- if job.returncode != 0:
- print >>sys.stderr, out
- print >>sys.stderr, err
- raise Exception(('Error %d running xcode-select, you might have to run '
- '|sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer| '
- 'if you are using Xcode 4.') % job.returncode)
- # The Developer folder moved in Xcode 4.3.
- xcode43_sdk_path = os.path.join(
+ if sys.platform == 'darwin':
+ job = subprocess.Popen(['xcode-select', '-print-path'],
+ stdout=subprocess.PIPE,
+ stderr=subprocess.STDOUT)
+ out, err = job.communicate()
+ if job.returncode != 0:
+ print >>sys.stderr, out
+ print >>sys.stderr, err
+ raise Exception(('Error %d running xcode-select, you might have to run '
+ '|sudo xcode-select --switch /Applications/Xcode.app/Contents/Developer| '
+ 'if you are using Xcode 4.') % job.returncode)
+ # The Developer folder moved in Xcode 4.3.
+ xcode43_sdk_path = os.path.join(
out.rstrip(), 'Platforms/MacOSX.platform/Developer/SDKs')
- if os.path.isdir(xcode43_sdk_path):
- sdk_dir = xcode43_sdk_path
+ if os.path.isdir(xcode43_sdk_path):
+ sdk_dir = xcode43_sdk_path
+ else:
+ sdk_dir = os.path.join(out.rstrip(), 'SDKs')
+ sdks = [re.findall('^MacOSX(10\.\d+)\.sdk$', s) for s in os.listdir(sdk_dir)]
+ sdks = [s[0] for s in sdks if s] # [['10.5'], ['10.6']] => ['10.5', '10.6']
+ sdks = [s for s in sdks # ['10.5', '10.6'] => ['10.6']
+ if parse_version(s) >= parse_version(min_sdk_version)]
+ if not sdks:
+ raise Exception('No %s+ SDK found' % min_sdk_version)
+ best_sdk = sorted(sdks, key=parse_version)[0]
else:
- sdk_dir = os.path.join(out.rstrip(), 'SDKs')
- sdks = [re.findall('^MacOSX(10\.\d+)\.sdk$', s) for s in os.listdir(sdk_dir)]
- sdks = [s[0] for s in sdks if s] # [['10.5'], ['10.6']] => ['10.5', '10.6']
- sdks = [s for s in sdks # ['10.5', '10.6'] => ['10.6']
- if parse_version(s) >= parse_version(min_sdk_version)]
- if not sdks:
- raise Exception('No %s+ SDK found' % min_sdk_version)
- best_sdk = sorted(sdks, key=parse_version)[0]
+ best_sdk = ""
if options.verify and best_sdk != min_sdk_version and not options.sdk_path:
print >>sys.stderr, ''
@@ -77,6 +80,4 @@ def main():
if __name__ == '__main__':
- if sys.platform != 'darwin':
- raise Exception("This script only runs on Mac")
print main()
diff --git a/mozglue/build/Makefile.in b/mozglue/build/Makefile.in
index cd4dae23975..22546d545fe 100644
--- a/mozglue/build/Makefile.in
+++ b/mozglue/build/Makefile.in
@@ -45,7 +45,14 @@ ifneq (,$(filter -DEFAULTLIB:mozcrt,$(MOZ_GLUE_LDFLAGS)))
NO_INSTALL_IMPORT_LIBRARY = 1
endif
-EXTRA_DSO_LDOPTS += $(MOZ_ZLIB_LIBS)
+
+EXTRA_DSO_LDOPTS += \
+ $(MOZ_ZLIB_LIBS) \
+ version.lib \
+ $(NULL)
+
+STL_FLAGS=
+
endif
ifeq (Darwin_1,$(OS_TARGET)_$(MOZ_REPLACE_MALLOC))
diff --git a/toolkit/xre/nsWindowsDllBlocklist.cpp b/mozglue/build/WindowsDllBlocklist.cpp
similarity index 87%
rename from toolkit/xre/nsWindowsDllBlocklist.cpp
rename to mozglue/build/WindowsDllBlocklist.cpp
index 73d21e87d08..8a8943c888a 100644
--- a/toolkit/xre/nsWindowsDllBlocklist.cpp
+++ b/mozglue/build/WindowsDllBlocklist.cpp
@@ -5,18 +5,15 @@
#include
#include
+#include
-#include
-#include
-
+#pragma warning( push )
+#pragma warning( disable : 4275 4530 ) // See msvc-stl-wrapper.template.h
#include