[1/2] trafficserver git commit: TS-3773: HostDB view all: add more detail for RR records

2015-07-23 Thread briang
Repository: trafficserver
Updated Branches:
  refs/heads/master 392d3abc9 -> d3a7f1b2f


TS-3773: HostDB view all: add more detail for RR records


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/08b5af2f
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/08b5af2f
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/08b5af2f

Branch: refs/heads/master
Commit: 08b5af2f89f4b05bca7a0b59076eae1c8894e163
Parents: f5e521e
Author: Brian Geffon 
Authored: Thu Jul 23 00:02:27 2015 -0700
Committer: Brian Geffon 
Committed: Thu Jul 23 00:02:27 2015 -0700

--
 iocore/hostdb/HostDB.cc | 15 ++-
 1 file changed, 14 insertions(+), 1 deletion(-)
--


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/08b5af2f/iocore/hostdb/HostDB.cc
--
diff --git a/iocore/hostdb/HostDB.cc b/iocore/hostdb/HostDB.cc
index 99a8480..0c91ea3 100644
--- a/iocore/hostdb/HostDB.cc
+++ b/iocore/hostdb/HostDB.cc
@@ -2430,7 +2430,20 @@ struct ShowHostDB : public ShowCont {
   {
 if (event == EVENT_INTERVAL) {
   HostDBInfo *r = reinterpret_cast(e);
-  return showOne(r, false, event, e);
+  showOne(r,false,event,e);
+  if (r->round_robin) {
+  HostDBRoundRobin *rr_data = r->rr();
+  if (rr_data) {
+CHECK_SHOW(show("\n"));
+CHECK_SHOW(show("%s%d\n", "Total", 
rr_data->rrcount));
+CHECK_SHOW(show("%s%d\n", "Good", 
rr_data->good));
+CHECK_SHOW(show("%s%d\n", 
"Current", rr_data->current));
+CHECK_SHOW(show("\n"));
+
+for (int i = 0; i < rr_data->rrcount; i++)
+  showOne(&rr_data->info[i], true, event, e);
+  }
+ }
 } else if (event == EVENT_DONE) {
   return complete(event, e);
 } else {



[2/2] trafficserver git commit: Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/trafficserver

2015-07-23 Thread briang
Merge branch 'master' of https://git-wip-us.apache.org/repos/asf/trafficserver


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/d3a7f1b2
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/d3a7f1b2
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/d3a7f1b2

Branch: refs/heads/master
Commit: d3a7f1b2f847feee3c17f1eaaa91df50ffef5e25
Parents: 08b5af2 392d3ab
Author: Brian Geffon 
Authored: Thu Jul 23 00:02:43 2015 -0700
Committer: Brian Geffon 
Committed: Thu Jul 23 00:02:43 2015 -0700

--
 proxy/hdrs/HdrHeap.cc | 2 +-
 proxy/hdrs/MIME.h | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)
--




trafficserver git commit: TS-3773 clang-format

2015-07-23 Thread zwoop
Repository: trafficserver
Updated Branches:
  refs/heads/master d3a7f1b2f -> 2791665b1


TS-3773 clang-format


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/2791665b
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/2791665b
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/2791665b

Branch: refs/heads/master
Commit: 2791665b106e2afb4693faeb31ab992babceb559
Parents: d3a7f1b
Author: Leif Hedstrom 
Authored: Thu Jul 23 09:16:46 2015 +0200
Committer: Leif Hedstrom 
Committed: Thu Jul 23 09:16:46 2015 +0200

--
 iocore/hostdb/HostDB.cc   | 26 +-
 proxy/http/HttpBodyFactory.cc |  3 ++-
 proxy/logging/Log.cc  | 11 ++-
 proxy/logging/LogAccess.h | 10 +-
 4 files changed, 26 insertions(+), 24 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/2791665b/iocore/hostdb/HostDB.cc
--
diff --git a/iocore/hostdb/HostDB.cc b/iocore/hostdb/HostDB.cc
index 0c91ea3..bb438a1 100644
--- a/iocore/hostdb/HostDB.cc
+++ b/iocore/hostdb/HostDB.cc
@@ -2430,20 +2430,20 @@ struct ShowHostDB : public ShowCont {
   {
 if (event == EVENT_INTERVAL) {
   HostDBInfo *r = reinterpret_cast(e);
-  showOne(r,false,event,e);
+  showOne(r, false, event, e);
   if (r->round_robin) {
-  HostDBRoundRobin *rr_data = r->rr();
-  if (rr_data) {
-CHECK_SHOW(show("\n"));
-CHECK_SHOW(show("%s%d\n", "Total", 
rr_data->rrcount));
-CHECK_SHOW(show("%s%d\n", "Good", 
rr_data->good));
-CHECK_SHOW(show("%s%d\n", 
"Current", rr_data->current));
-CHECK_SHOW(show("\n"));
-
-for (int i = 0; i < rr_data->rrcount; i++)
-  showOne(&rr_data->info[i], true, event, e);
-  }
- }
+HostDBRoundRobin *rr_data = r->rr();
+if (rr_data) {
+  CHECK_SHOW(show("\n"));
+  CHECK_SHOW(show("%s%d\n", "Total", 
rr_data->rrcount));
+  CHECK_SHOW(show("%s%d\n", "Good", 
rr_data->good));
+  CHECK_SHOW(show("%s%d\n", "Current", 
rr_data->current));
+  CHECK_SHOW(show("\n"));
+
+  for (int i = 0; i < rr_data->rrcount; i++)
+showOne(&rr_data->info[i], true, event, e);
+}
+  }
 } else if (event == EVENT_DONE) {
   return complete(event, e);
 } else {

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/2791665b/proxy/http/HttpBodyFactory.cc
--
diff --git a/proxy/http/HttpBodyFactory.cc b/proxy/http/HttpBodyFactory.cc
index 89960b2..362b335 100644
--- a/proxy/http/HttpBodyFactory.cc
+++ b/proxy/http/HttpBodyFactory.cc
@@ -449,7 +449,8 @@ HttpBodyFactory::fabricate(StrList *acpt_language_list, 
StrList *acpt_charset_li
 
 // LOCKING: must be called with lock taken
 const char *
-HttpBodyFactory::determine_set_by_host(HttpTransact::State *context) {
+HttpBodyFactory::determine_set_by_host(HttpTransact::State *context)
+{
   const char *set;
   RawHashTable_Value v;
   int host_len = context->hh_info.host_len;

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/2791665b/proxy/logging/Log.cc
--
diff --git a/proxy/logging/Log.cc b/proxy/logging/Log.cc
index 6f20b46..166f3b8 100644
--- a/proxy/logging/Log.cc
+++ b/proxy/logging/Log.cc
@@ -344,15 +344,16 @@ Log::init_fields()
 new LogField("client_host_ip_hex", "chih", LogField::IP, 
&LogAccess::marshal_client_host_ip, &LogAccess::unmarshal_ip_to_hex);
   global_field_list.add(field, false);
   ink_hash_table_insert(field_symbol_hash, "chih", field);
-  
-  // interface ip 
 
-  field = new LogField("host_interface_ip", "hii", LogField::IP, 
&LogAccess::marshal_host_interface_ip, &LogAccess::unmarshal_ip_to_str);
+  // interface ip
+
+  field =
+new LogField("host_interface_ip", "hii", LogField::IP, 
&LogAccess::marshal_host_interface_ip, &LogAccess::unmarshal_ip_to_str);
   global_field_list.add(field, false);
   ink_hash_table_insert(field_symbol_hash, "hii", field);
 
-  field =
-new LogField("host_interface_ip_hex", "hiih", LogField::IP, 
&LogAccess::marshal_host_interface_ip, &LogAccess::unmarshal_ip_to_hex);
+  field = new LogField("host_interface_ip_hex", "hiih", LogField::IP, 
&LogAccess::marshal_host_interface_ip,
+   &LogAccess::unmarshal_ip_to_hex);
   global_field_list.add(field, false);
   ink_hash_table_insert(field_symbol_hash, "hiih", field);
   // interface ip end

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/2791665b/proxy/logging/LogAccess.h

[21/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_crecord.c
--
diff --git a/lib/luajit/src/lj_crecord.c b/lib/luajit/src/lj_crecord.c
new file mode 100644
index 000..a46665e
--- /dev/null
+++ b/lib/luajit/src/lj_crecord.c
@@ -0,0 +1,1671 @@
+/*
+** Trace recorder for C data operations.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#define lj_ffrecord_c
+#define LUA_CORE
+
+#include "lj_obj.h"
+
+#if LJ_HASJIT && LJ_HASFFI
+
+#include "lj_err.h"
+#include "lj_str.h"
+#include "lj_tab.h"
+#include "lj_frame.h"
+#include "lj_ctype.h"
+#include "lj_cdata.h"
+#include "lj_cparse.h"
+#include "lj_cconv.h"
+#include "lj_clib.h"
+#include "lj_ccall.h"
+#include "lj_ff.h"
+#include "lj_ir.h"
+#include "lj_jit.h"
+#include "lj_ircall.h"
+#include "lj_iropt.h"
+#include "lj_trace.h"
+#include "lj_record.h"
+#include "lj_ffrecord.h"
+#include "lj_snap.h"
+#include "lj_crecord.h"
+#include "lj_dispatch.h"
+
+/* Some local macros to save typing. Undef'd at the end. */
+#define IR(ref)(&J->cur.ir[(ref)])
+
+/* Pass IR on to next optimization in chain (FOLD). */
+#define emitir(ot, a, b)   (lj_ir_set(J, (ot), (a), (b)), lj_opt_fold(J))
+
+#define emitconv(a, dt, st, flags) \
+  emitir(IRT(IR_CONV, (dt)), (a), (st)|((dt) << 5)|(flags))
+
+/* -- C type checks --- */
+
+static GCcdata *argv2cdata(jit_State *J, TRef tr, cTValue *o)
+{
+  GCcdata *cd;
+  TRef trtypeid;
+  if (!tref_iscdata(tr))
+lj_trace_err(J, LJ_TRERR_BADTYPE);
+  cd = cdataV(o);
+  /* Specialize to the CTypeID. */
+  trtypeid = emitir(IRT(IR_FLOAD, IRT_U16), tr, IRFL_CDATA_CTYPEID);
+  emitir(IRTG(IR_EQ, IRT_INT), trtypeid, lj_ir_kint(J, (int32_t)cd->ctypeid));
+  return cd;
+}
+
+/* Specialize to the CTypeID held by a cdata constructor. */
+static CTypeID crec_constructor(jit_State *J, GCcdata *cd, TRef tr)
+{
+  CTypeID id;
+  lua_assert(tref_iscdata(tr) && cd->ctypeid == CTID_CTYPEID);
+  id = *(CTypeID *)cdataptr(cd);
+  tr = emitir(IRT(IR_FLOAD, IRT_INT), tr, IRFL_CDATA_INT);
+  emitir(IRTG(IR_EQ, IRT_INT), tr, lj_ir_kint(J, (int32_t)id));
+  return id;
+}
+
+static CTypeID argv2ctype(jit_State *J, TRef tr, cTValue *o)
+{
+  if (tref_isstr(tr)) {
+GCstr *s = strV(o);
+CPState cp;
+CTypeID oldtop;
+/* Specialize to the string containing the C type declaration. */
+emitir(IRTG(IR_EQ, IRT_STR), tr, lj_ir_kstr(J, s));
+cp.L = J->L;
+cp.cts = ctype_ctsG(J2G(J));
+oldtop = cp.cts->top;
+cp.srcname = strdata(s);
+cp.p = strdata(s);
+cp.param = NULL;
+cp.mode = CPARSE_MODE_ABSTRACT|CPARSE_MODE_NOIMPLICIT;
+if (lj_cparse(&cp) || cp.cts->top > oldtop)  /* Avoid new struct defs. */
+  lj_trace_err(J, LJ_TRERR_BADTYPE);
+return cp.val.id;
+  } else {
+GCcdata *cd = argv2cdata(J, tr, o);
+return cd->ctypeid == CTID_CTYPEID ? crec_constructor(J, cd, tr) :
+   cd->ctypeid;
+  }
+}
+
+/* Convert CType to IRType (if possible). */
+static IRType crec_ct2irt(CTState *cts, CType *ct)
+{
+  if (ctype_isenum(ct->info)) ct = ctype_child(cts, ct);
+  if (LJ_LIKELY(ctype_isnum(ct->info))) {
+if ((ct->info & CTF_FP)) {
+  if (ct->size == sizeof(double))
+   return IRT_NUM;
+  else if (ct->size == sizeof(float))
+   return IRT_FLOAT;
+} else {
+  uint32_t b = lj_fls(ct->size);
+  if (b <= 3)
+   return IRT_I8 + 2*b + ((ct->info & CTF_UNSIGNED) ? 1 : 0);
+}
+  } else if (ctype_isptr(ct->info)) {
+return (LJ_64 && ct->size == 8) ? IRT_P64 : IRT_P32;
+  } else if (ctype_iscomplex(ct->info)) {
+if (ct->size == 2*sizeof(double))
+  return IRT_NUM;
+else if (ct->size == 2*sizeof(float))
+  return IRT_FLOAT;
+  }
+  return IRT_CDATA;
+}
+
+/* -- Optimized memory fill and copy -- */
+
+/* Maximum length and unroll of inlined copy/fill. */
+#define CREC_COPY_MAXUNROLL16
+#define CREC_COPY_MAXLEN   128
+
+#define CREC_FILL_MAXUNROLL16
+
+/* Number of windowed registers used for optimized memory copy. */
+#if LJ_TARGET_X86
+#define CREC_COPY_REGWIN   2
+#elif LJ_TARGET_PPC || LJ_TARGET_MIPS
+#define CREC_COPY_REGWIN   8
+#else
+#define CREC_COPY_REGWIN   4
+#endif
+
+/* List of memory offsets for copy/fill. */
+typedef struct CRecMemList {
+  CTSize ofs;  /* Offset in bytes. */
+  IRType tp;   /* Type of load/store. */
+  TRef trofs;  /* TRef of interned offset. */
+  TRef trval;  /* TRef of load value. */
+} CRecMemList;
+
+/* Generate copy list for element-wise struct copy. */
+static MSize crec_copy_struct(CRecMemList *ml, CTState *cts, CType *ct)
+{
+  CTypeID fid = ct->sib;
+  MSize mlp = 0;
+  while (fid) {
+CType *df = ctype_get(cts, fid);
+fid = df->sib;
+

[09/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_tab.c
--
diff --git a/lib/luajit/src/lj_tab.c b/lib/luajit/src/lj_tab.c
new file mode 100644
index 000..a8062db
--- /dev/null
+++ b/lib/luajit/src/lj_tab.c
@@ -0,0 +1,631 @@
+/*
+** Table handling.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+**
+** Major portions taken verbatim or adapted from the Lua interpreter.
+** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h
+*/
+
+#define lj_tab_c
+#define LUA_CORE
+
+#include "lj_obj.h"
+#include "lj_gc.h"
+#include "lj_err.h"
+#include "lj_tab.h"
+
+/* -- Object hashing -- */
+
+/* Hash values are masked with the table hash mask and used as an index. */
+static LJ_AINLINE Node *hashmask(const GCtab *t, uint32_t hash)
+{
+  Node *n = noderef(t->node);
+  return &n[hash & t->hmask];
+}
+
+/* String hashes are precomputed when they are interned. */
+#define hashstr(t, s)  hashmask(t, (s)->hash)
+
+#define hashlohi(t, lo, hi)hashmask((t), hashrot((lo), (hi)))
+#define hashnum(t, o)  hashlohi((t), (o)->u32.lo, ((o)->u32.hi << 1))
+#define hashptr(t, p)  hashlohi((t), u32ptr(p), u32ptr(p) + HASH_BIAS)
+#define hashgcref(t, r)hashlohi((t), gcrefu(r), gcrefu(r) + 
HASH_BIAS)
+
+/* Hash an arbitrary key and return its anchor position in the hash table. */
+static Node *hashkey(const GCtab *t, cTValue *key)
+{
+  lua_assert(!tvisint(key));
+  if (tvisstr(key))
+return hashstr(t, strV(key));
+  else if (tvisnum(key))
+return hashnum(t, key);
+  else if (tvisbool(key))
+return hashmask(t, boolV(key));
+  else
+return hashgcref(t, key->gcr);
+  /* Only hash 32 bits of lightuserdata on a 64 bit CPU. Good enough? */
+}
+
+/* -- Table creation and destruction -- */
+
+/* Create new hash part for table. */
+static LJ_AINLINE void newhpart(lua_State *L, GCtab *t, uint32_t hbits)
+{
+  uint32_t hsize;
+  Node *node;
+  lua_assert(hbits != 0);
+  if (hbits > LJ_MAX_HBITS)
+lj_err_msg(L, LJ_ERR_TABOV);
+  hsize = 1u << hbits;
+  node = lj_mem_newvec(L, hsize, Node);
+  setmref(node->freetop, &node[hsize]);
+  setmref(t->node, node);
+  t->hmask = hsize-1;
+}
+
+/*
+** Q: Why all of these copies of t->hmask, t->node etc. to local variables?
+** A: Because alias analysis for C is _really_ tough.
+**Even state-of-the-art C compilers won't produce good code without this.
+*/
+
+/* Clear hash part of table. */
+static LJ_AINLINE void clearhpart(GCtab *t)
+{
+  uint32_t i, hmask = t->hmask;
+  Node *node = noderef(t->node);
+  lua_assert(t->hmask != 0);
+  for (i = 0; i <= hmask; i++) {
+Node *n = &node[i];
+setmref(n->next, NULL);
+setnilV(&n->key);
+setnilV(&n->val);
+  }
+}
+
+/* Clear array part of table. */
+static LJ_AINLINE void clearapart(GCtab *t)
+{
+  uint32_t i, asize = t->asize;
+  TValue *array = tvref(t->array);
+  for (i = 0; i < asize; i++)
+setnilV(&array[i]);
+}
+
+/* Create a new table. Note: the slots are not initialized (yet). */
+static GCtab *newtab(lua_State *L, uint32_t asize, uint32_t hbits)
+{
+  GCtab *t;
+  /* First try to colocate the array part. */
+  if (LJ_MAX_COLOSIZE != 0 && asize > 0 && asize <= LJ_MAX_COLOSIZE) {
+lua_assert((sizeof(GCtab) & 7) == 0);
+t = (GCtab *)lj_mem_newgco(L, sizetabcolo(asize));
+t->gct = ~LJ_TTAB;
+t->nomm = (uint8_t)~0;
+t->colo = (int8_t)asize;
+setmref(t->array, (TValue *)((char *)t + sizeof(GCtab)));
+setgcrefnull(t->metatable);
+t->asize = asize;
+t->hmask = 0;
+setmref(t->node, &G(L)->nilnode);
+  } else {  /* Otherwise separately allocate the array part. */
+t = lj_mem_newobj(L, GCtab);
+t->gct = ~LJ_TTAB;
+t->nomm = (uint8_t)~0;
+t->colo = 0;
+setmref(t->array, NULL);
+setgcrefnull(t->metatable);
+t->asize = 0;  /* In case the array allocation fails. */
+t->hmask = 0;
+setmref(t->node, &G(L)->nilnode);
+if (asize > 0) {
+  if (asize > LJ_MAX_ASIZE)
+   lj_err_msg(L, LJ_ERR_TABOV);
+  setmref(t->array, lj_mem_newvec(L, asize, TValue));
+  t->asize = asize;
+}
+  }
+  if (hbits)
+newhpart(L, t, hbits);
+  return t;
+}
+
+/* Create a new table.
+**
+** IMPORTANT NOTE: The API differs from lua_createtable()!
+**
+** The array size is non-inclusive. E.g. asize=128 creates array slots
+** for 0..127, but not for 128. If you need slots 1..128, pass asize=129
+** (slot 0 is wasted in this case).
+**
+** The hash size is given in hash bits. hbits=0 means no hash part.
+** hbits=1 creates 2 hash slots, hbits=2 creates 4 hash slots and so on.
+*/
+GCtab *lj_tab_new(lua_State *L, uint32_t asize, uint32_t hbits)
+{
+  GCtab *t = newtab(L, asize, hbits);
+  clearapart(t);
+  if (t->hmask > 0) clearhpart(t);
+  return t;
+}
+
+#if LJ_HASJIT
+GCtab * LJ_F

[01/43] trafficserver git commit: TS-3030 Remove the LuaJIT sub-module

2015-07-23 Thread zwoop
Repository: trafficserver
Updated Branches:
  refs/heads/master 2791665b1 -> 1f27b8407


TS-3030 Remove the LuaJIT sub-module


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/0faed061
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/0faed061
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/0faed061

Branch: refs/heads/master
Commit: 0faed06168f44494bbc5284d7e11c5fa81e111e7
Parents: 2791665
Author: Leif Hedstrom 
Authored: Thu Jul 23 12:40:14 2015 +0200
Committer: Leif Hedstrom 
Committed: Thu Jul 23 12:40:14 2015 +0200

--
 .gitmodules | 3 ---
 lib/luajit  | 1 -
 2 files changed, 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/0faed061/.gitmodules
--
diff --git a/.gitmodules b/.gitmodules
index 2111b7d..e69de29 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -1,3 +0,0 @@
-[submodule "lib/luajit"]
-   path = lib/luajit
-   url = http://luajit.org/git/luajit-2.0.git

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/0faed061/lib/luajit
--
diff --git a/lib/luajit b/lib/luajit
deleted file mode 16
index 880ca30..000
--- a/lib/luajit
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit 880ca300e8fb7b432b9d25ed377db2102e4cb63d



[14/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_opt_mem.c
--
diff --git a/lib/luajit/src/lj_opt_mem.c b/lib/luajit/src/lj_opt_mem.c
new file mode 100644
index 000..a4d96fc
--- /dev/null
+++ b/lib/luajit/src/lj_opt_mem.c
@@ -0,0 +1,916 @@
+/*
+** Memory access optimizations.
+** AA: Alias Analysis using high-level semantic disambiguation.
+** FWD: Load Forwarding (L2L) + Store Forwarding (S2L).
+** DSE: Dead-Store Elimination.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#define lj_opt_mem_c
+#define LUA_CORE
+
+#include "lj_obj.h"
+
+#if LJ_HASJIT
+
+#include "lj_tab.h"
+#include "lj_ir.h"
+#include "lj_jit.h"
+#include "lj_iropt.h"
+
+/* Some local macros to save typing. Undef'd at the end. */
+#define IR(ref)(&J->cur.ir[(ref)])
+#define fins   (&J->fold.ins)
+#define fleft  (&J->fold.left)
+#define fright (&J->fold.right)
+
+/*
+** Caveat #1: return value is not always a TRef -- only use with tref_ref().
+** Caveat #2: FWD relies on active CSE for xREF operands -- see lj_opt_fold().
+*/
+
+/* Return values from alias analysis. */
+typedef enum {
+  ALIAS_NO,/* The two refs CANNOT alias (exact). */
+  ALIAS_MAY,   /* The two refs MAY alias (inexact). */
+  ALIAS_MUST   /* The two refs MUST alias (exact). */
+} AliasRet;
+
+/* -- ALOAD/HLOAD forwarding and ASTORE/HSTORE elimination  */
+
+/* Simplified escape analysis: check for intervening stores. */
+static AliasRet aa_escape(jit_State *J, IRIns *ir, IRIns *stop)
+{
+  IRRef ref = (IRRef)(ir - J->cur.ir);  /* The ref that might be stored. */
+  for (ir++; ir < stop; ir++)
+if (ir->op2 == ref &&
+   (ir->o == IR_ASTORE || ir->o == IR_HSTORE ||
+ir->o == IR_USTORE || ir->o == IR_FSTORE))
+  return ALIAS_MAY;  /* Reference was stored and might alias. */
+  return ALIAS_NO;  /* Reference was not stored. */
+}
+
+/* Alias analysis for two different table references. */
+static AliasRet aa_table(jit_State *J, IRRef ta, IRRef tb)
+{
+  IRIns *taba = IR(ta), *tabb = IR(tb);
+  int newa, newb;
+  lua_assert(ta != tb);
+  lua_assert(irt_istab(taba->t) && irt_istab(tabb->t));
+  /* Disambiguate new allocations. */
+  newa = (taba->o == IR_TNEW || taba->o == IR_TDUP);
+  newb = (tabb->o == IR_TNEW || tabb->o == IR_TDUP);
+  if (newa && newb)
+return ALIAS_NO;  /* Two different allocations never alias. */
+  if (newb) {  /* At least one allocation? */
+IRIns *tmp = taba; taba = tabb; tabb = tmp;
+  } else if (!newa) {
+return ALIAS_MAY;  /* Anything else: we just don't know. */
+  }
+  return aa_escape(J, taba, tabb);
+}
+
+/* Alias analysis for array and hash access using key-based disambiguation. */
+static AliasRet aa_ahref(jit_State *J, IRIns *refa, IRIns *refb)
+{
+  IRRef ka = refa->op2;
+  IRRef kb = refb->op2;
+  IRIns *keya, *keyb;
+  IRRef ta, tb;
+  if (refa == refb)
+return ALIAS_MUST;  /* Shortcut for same refs. */
+  keya = IR(ka);
+  if (keya->o == IR_KSLOT) { ka = keya->op1; keya = IR(ka); }
+  keyb = IR(kb);
+  if (keyb->o == IR_KSLOT) { kb = keyb->op1; keyb = IR(kb); }
+  ta = (refa->o==IR_HREFK || refa->o==IR_AREF) ? IR(refa->op1)->op1 : 
refa->op1;
+  tb = (refb->o==IR_HREFK || refb->o==IR_AREF) ? IR(refb->op1)->op1 : 
refb->op1;
+  if (ka == kb) {
+/* Same key. Check for same table with different ref (NEWREF vs. HREF). */
+if (ta == tb)
+  return ALIAS_MUST;  /* Same key, same table. */
+else
+  return aa_table(J, ta, tb);  /* Same key, possibly different table. */
+  }
+  if (irref_isk(ka) && irref_isk(kb))
+return ALIAS_NO;  /* Different constant keys. */
+  if (refa->o == IR_AREF) {
+/* Disambiguate array references based on index arithmetic. */
+int32_t ofsa = 0, ofsb = 0;
+IRRef basea = ka, baseb = kb;
+lua_assert(refb->o == IR_AREF);
+/* Gather base and offset from t[base] or t[base+-ofs]. */
+if (keya->o == IR_ADD && irref_isk(keya->op2)) {
+  basea = keya->op1;
+  ofsa = IR(keya->op2)->i;
+  if (basea == kb && ofsa != 0)
+   return ALIAS_NO;  /* t[base+-ofs] vs. t[base]. */
+}
+if (keyb->o == IR_ADD && irref_isk(keyb->op2)) {
+  baseb = keyb->op1;
+  ofsb = IR(keyb->op2)->i;
+  if (ka == baseb && ofsb != 0)
+   return ALIAS_NO;  /* t[base] vs. t[base+-ofs]. */
+}
+if (basea == baseb && ofsa != ofsb)
+  return ALIAS_NO;  /* t[base+-o1] vs. t[base+-o2] and o1 != o2. */
+  } else {
+/* Disambiguate hash references based on the type of their keys. */
+lua_assert((refa->o==IR_HREF || refa->o==IR_HREFK || refa->o==IR_NEWREF) &&
+  (refb->o==IR_HREF || refb->o==IR_HREFK || refb->o==IR_NEWREF));
+if (!irt_sametype(keya->t, keyb->t))
+  return ALIAS_NO;  /* Different key types. */
+  }
+  if (ta == tb)
+return ALIAS_MAY;  /* Same table, cannot disambiguate keys. */
+  else
+retur

[30/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_alloc.c
--
diff --git a/lib/luajit/src/lj_alloc.c b/lib/luajit/src/lj_alloc.c
new file mode 100644
index 000..7c7ec67
--- /dev/null
+++ b/lib/luajit/src/lj_alloc.c
@@ -0,0 +1,1396 @@
+/*
+** Bundled memory allocator.
+**
+** Beware: this is a HEAVILY CUSTOMIZED version of dlmalloc.
+** The original bears the following remark:
+**
+**   This is a version (aka dlmalloc) of malloc/free/realloc written by
+**   Doug Lea and released to the public domain, as explained at
+**   http://creativecommons.org/licenses/publicdomain.
+**
+**   * Version pre-2.8.4 Wed Mar 29 19:46:29 2006(dl at gee)
+**
+** No additional copyright is claimed over the customizations.
+** Please do NOT bother the original author about this version here!
+**
+** If you want to use dlmalloc in another project, you should get
+** the original from: ftp://gee.cs.oswego.edu/pub/misc/
+** For thread-safe derivatives, take a look at:
+** - ptmalloc: http://www.malloc.de/
+** - nedmalloc: http://www.nedprod.com/programs/portable/nedmalloc/
+*/
+
+#define lj_alloc_c
+#define LUA_CORE
+
+/* To get the mremap prototype. Must be defined before any system includes. */
+#if defined(__linux__) && !defined(_GNU_SOURCE)
+#define _GNU_SOURCE
+#endif
+
+#include "lj_def.h"
+#include "lj_arch.h"
+#include "lj_alloc.h"
+
+#ifndef LUAJIT_USE_SYSMALLOC
+
+#define MAX_SIZE_T (~(size_t)0)
+#define MALLOC_ALIGNMENT   ((size_t)8U)
+
+#define DEFAULT_GRANULARITY((size_t)128U * (size_t)1024U)
+#define DEFAULT_TRIM_THRESHOLD ((size_t)2U * (size_t)1024U * (size_t)1024U)
+#define DEFAULT_MMAP_THRESHOLD ((size_t)128U * (size_t)1024U)
+#define MAX_RELEASE_CHECK_RATE 255
+
+/* --- size_t and alignment properties  */
+
+/* The byte and bit size of a size_t */
+#define SIZE_T_SIZE(sizeof(size_t))
+#define SIZE_T_BITSIZE (sizeof(size_t) << 3)
+
+/* Some constants coerced to size_t */
+/* Annoying but necessary to avoid errors on some platforms */
+#define SIZE_T_ZERO((size_t)0)
+#define SIZE_T_ONE ((size_t)1)
+#define SIZE_T_TWO ((size_t)2)
+#define TWO_SIZE_T_SIZES   (SIZE_T_SIZE<<1)
+#define FOUR_SIZE_T_SIZES  (SIZE_T_SIZE<<2)
+#define SIX_SIZE_T_SIZES   (FOUR_SIZE_T_SIZES+TWO_SIZE_T_SIZES)
+
+/* The bit mask value corresponding to MALLOC_ALIGNMENT */
+#define CHUNK_ALIGN_MASK   (MALLOC_ALIGNMENT - SIZE_T_ONE)
+
+/* the number of bytes to offset an address to align it */
+#define align_offset(A)\
+ size_t)(A) & CHUNK_ALIGN_MASK) == 0)? 0 :\
+  ((MALLOC_ALIGNMENT - ((size_t)(A) & CHUNK_ALIGN_MASK)) & CHUNK_ALIGN_MASK))
+
+/* -- MMAP support --- */
+
+#define MFAIL  ((void *)(MAX_SIZE_T))
+#define CMFAIL ((char *)(MFAIL)) /* defined for convenience */
+
+#define IS_DIRECT_BIT  (SIZE_T_ONE)
+
+#if LJ_TARGET_WINDOWS
+
+#define WIN32_LEAN_AND_MEAN
+#include 
+
+#if LJ_64
+
+/* Undocumented, but hey, that's what we all love so much about Windows. */
+typedef long (*PNTAVM)(HANDLE handle, void **addr, ULONG zbits,
+  size_t *size, ULONG alloctype, ULONG prot);
+static PNTAVM ntavm;
+
+/* Number of top bits of the lower 32 bits of an address that must be zero.
+** Apparently 0 gives us full 64 bit addresses and 1 gives us the lower 2GB.
+*/
+#define NTAVM_ZEROBITS 1
+
+static void INIT_MMAP(void)
+{
+  ntavm = (PNTAVM)GetProcAddress(GetModuleHandleA("ntdll.dll"),
+"NtAllocateVirtualMemory");
+}
+
+/* Win64 32 bit MMAP via NtAllocateVirtualMemory. */
+static LJ_AINLINE void *CALL_MMAP(size_t size)
+{
+  DWORD olderr = GetLastError();
+  void *ptr = NULL;
+  long st = ntavm(INVALID_HANDLE_VALUE, &ptr, NTAVM_ZEROBITS, &size,
+ MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
+  SetLastError(olderr);
+  return st == 0 ? ptr : MFAIL;
+}
+
+/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */
+static LJ_AINLINE void *DIRECT_MMAP(size_t size)
+{
+  DWORD olderr = GetLastError();
+  void *ptr = NULL;
+  long st = ntavm(INVALID_HANDLE_VALUE, &ptr, NTAVM_ZEROBITS, &size,
+ MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, PAGE_READWRITE);
+  SetLastError(olderr);
+  return st == 0 ? ptr : MFAIL;
+}
+
+#else
+
+#define INIT_MMAP()((void)0)
+
+/* Win32 MMAP via VirtualAlloc */
+static LJ_AINLINE void *CALL_MMAP(size_t size)
+{
+  DWORD olderr = GetLastError();
+  void *ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT, PAGE_READWRITE);
+  SetLastError(olderr);
+  return ptr ? ptr : MFAIL;
+}
+
+/* For direct MMAP, use MEM_TOP_DOWN to minimize interference */
+static LJ_AINLINE void *DIRECT_MMAP(size_t size)
+{
+  DWORD olderr = GetLastError();
+  void *ptr = VirtualAlloc(0, size, MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN,
+

[27/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_asm_mips.h
--
diff --git a/lib/luajit/src/lj_asm_mips.h b/lib/luajit/src/lj_asm_mips.h
new file mode 100644
index 000..78bd26d
--- /dev/null
+++ b/lib/luajit/src/lj_asm_mips.h
@@ -0,0 +1,1977 @@
+/*
+** MIPS IR assembler (SSA IR -> machine code).
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+/* -- Register allocator extensions --- */
+
+/* Allocate a register with a hint. */
+static Reg ra_hintalloc(ASMState *as, IRRef ref, Reg hint, RegSet allow)
+{
+  Reg r = IR(ref)->r;
+  if (ra_noreg(r)) {
+if (!ra_hashint(r) && !iscrossref(as, ref))
+  ra_sethint(IR(ref)->r, hint);  /* Propagate register hint. */
+r = ra_allocref(as, ref, allow);
+  }
+  ra_noweak(as, r);
+  return r;
+}
+
+/* Allocate a register or RID_ZERO. */
+static Reg ra_alloc1z(ASMState *as, IRRef ref, RegSet allow)
+{
+  Reg r = IR(ref)->r;
+  if (ra_noreg(r)) {
+if (!(allow & RSET_FPR) && irref_isk(ref) && IR(ref)->i == 0)
+  return RID_ZERO;
+r = ra_allocref(as, ref, allow);
+  } else {
+ra_noweak(as, r);
+  }
+  return r;
+}
+
+/* Allocate two source registers for three-operand instructions. */
+static Reg ra_alloc2(ASMState *as, IRIns *ir, RegSet allow)
+{
+  IRIns *irl = IR(ir->op1), *irr = IR(ir->op2);
+  Reg left = irl->r, right = irr->r;
+  if (ra_hasreg(left)) {
+ra_noweak(as, left);
+if (ra_noreg(right))
+  right = ra_alloc1z(as, ir->op2, rset_exclude(allow, left));
+else
+  ra_noweak(as, right);
+  } else if (ra_hasreg(right)) {
+ra_noweak(as, right);
+left = ra_alloc1z(as, ir->op1, rset_exclude(allow, right));
+  } else if (ra_hashint(right)) {
+right = ra_alloc1z(as, ir->op2, allow);
+left = ra_alloc1z(as, ir->op1, rset_exclude(allow, right));
+  } else {
+left = ra_alloc1z(as, ir->op1, allow);
+right = ra_alloc1z(as, ir->op2, rset_exclude(allow, left));
+  }
+  return left | (right << 8);
+}
+
+/* -- Guard handling -- */
+
+/* Need some spare long-range jump slots, for out-of-range branches. */
+#define MIPS_SPAREJUMP 4
+
+/* Setup spare long-range jump slots per mcarea. */
+static void asm_sparejump_setup(ASMState *as)
+{
+  MCode *mxp = as->mcbot;
+  /* Assumes sizeof(MCLink) == 8. */
+  if (((uintptr_t)mxp & (LJ_PAGESIZE-1)) == 8) {
+lua_assert(MIPSI_NOP == 0);
+memset(mxp+2, 0, MIPS_SPAREJUMP*8);
+mxp += MIPS_SPAREJUMP*2;
+lua_assert(mxp < as->mctop);
+lj_mcode_sync(as->mcbot, mxp);
+lj_mcode_commitbot(as->J, mxp);
+as->mcbot = mxp;
+as->mclim = as->mcbot + MCLIM_REDZONE;
+  }
+}
+
+/* Setup exit stub after the end of each trace. */
+static void asm_exitstub_setup(ASMState *as)
+{
+  MCode *mxp = as->mctop;
+  /* sw TMP, 0(sp); j ->vm_exit_handler; li TMP, traceno */
+  *--mxp = MIPSI_LI|MIPSF_T(RID_TMP)|as->T->traceno;
+  *--mxp = MIPSI_J|uintptr_t)(void *)lj_vm_exit_handler)>>2)&0x03ffu);
+  lua_assert(((uintptr_t)mxp ^ (uintptr_t)(void *)lj_vm_exit_handler)>>28 == 
0);
+  *--mxp = MIPSI_SW|MIPSF_T(RID_TMP)|MIPSF_S(RID_SP)|0;
+  as->mctop = mxp;
+}
+
+/* Keep this in-sync with exitstub_trace_addr(). */
+#define asm_exitstub_addr(as)  ((as)->mctop)
+
+/* Emit conditional branch to exit for guard. */
+static void asm_guard(ASMState *as, MIPSIns mi, Reg rs, Reg rt)
+{
+  MCode *target = asm_exitstub_addr(as);
+  MCode *p = as->mcp;
+  if (LJ_UNLIKELY(p == as->invmcp)) {
+as->invmcp = NULL;
+as->loopinv = 1;
+as->mcp = p+1;
+mi = mi ^ ((mi>>28) == 1 ? 0x0400u : 0x0001u);  /* Invert cond. */
+target = p;  /* Patch target later in asm_loop_fixup. */
+  }
+  emit_ti(as, MIPSI_LI, RID_TMP, as->snapno);
+  emit_branch(as, mi, rs, rt, target);
+}
+
+/* -- Operand fusion -- */
+
+/* Limit linear search to this distance. Avoids O(n^2) behavior. */
+#define CONFLICT_SEARCH_LIM31
+
+/* Check if there's no conflicting instruction between curins and ref. */
+static int noconflict(ASMState *as, IRRef ref, IROp conflict)
+{
+  IRIns *ir = as->ir;
+  IRRef i = as->curins;
+  if (i > ref + CONFLICT_SEARCH_LIM)
+return 0;  /* Give up, ref is too far away. */
+  while (--i > ref)
+if (ir[i].o == conflict)
+  return 0;  /* Conflict found. */
+  return 1;  /* Ok, no conflict. */
+}
+
+/* Fuse the array base of colocated arrays. */
+static int32_t asm_fuseabase(ASMState *as, IRRef ref)
+{
+  IRIns *ir = IR(ref);
+  if (ir->o == IR_TNEW && ir->op1 <= LJ_MAX_COLOSIZE &&
+  !neverfuse(as) && noconflict(as, ref, IR_NEWREF))
+return (int32_t)sizeof(GCtab);
+  return 0;
+}
+
+/* Fuse array/hash/upvalue reference into register+offset operand. */
+static Reg asm_fuseahuref(ASMState *as, IRRef ref, int32_t *ofsp, RegSet allow)
+{
+  IRIns *ir = IR(ref);
+  if (ra_

[31/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lib_math.c
--
diff --git a/lib/luajit/src/lib_math.c b/lib/luajit/src/lib_math.c
new file mode 100644
index 000..40f2914
--- /dev/null
+++ b/lib/luajit/src/lib_math.c
@@ -0,0 +1,233 @@
+/*
+** Math library.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#include 
+
+#define lib_math_c
+#define LUA_LIB
+
+#include "lua.h"
+#include "lauxlib.h"
+#include "lualib.h"
+
+#include "lj_obj.h"
+#include "lj_lib.h"
+#include "lj_vm.h"
+
+/*  */
+
+#define LJLIB_MODULE_math
+
+LJLIB_ASM(math_abs)LJLIB_REC(.)
+{
+  lj_lib_checknumber(L, 1);
+  return FFH_RETRY;
+}
+LJLIB_ASM_(math_floor) LJLIB_REC(math_round IRFPM_FLOOR)
+LJLIB_ASM_(math_ceil)  LJLIB_REC(math_round IRFPM_CEIL)
+
+LJLIB_ASM(math_sqrt)   LJLIB_REC(math_unary IRFPM_SQRT)
+{
+  lj_lib_checknum(L, 1);
+  return FFH_RETRY;
+}
+LJLIB_ASM_(math_log10) LJLIB_REC(math_unary IRFPM_LOG10)
+LJLIB_ASM_(math_exp)   LJLIB_REC(math_unary IRFPM_EXP)
+LJLIB_ASM_(math_sin)   LJLIB_REC(math_unary IRFPM_SIN)
+LJLIB_ASM_(math_cos)   LJLIB_REC(math_unary IRFPM_COS)
+LJLIB_ASM_(math_tan)   LJLIB_REC(math_unary IRFPM_TAN)
+LJLIB_ASM_(math_asin)  LJLIB_REC(math_atrig FF_math_asin)
+LJLIB_ASM_(math_acos)  LJLIB_REC(math_atrig FF_math_acos)
+LJLIB_ASM_(math_atan)  LJLIB_REC(math_atrig FF_math_atan)
+LJLIB_ASM_(math_sinh)  LJLIB_REC(math_htrig IRCALL_sinh)
+LJLIB_ASM_(math_cosh)  LJLIB_REC(math_htrig IRCALL_cosh)
+LJLIB_ASM_(math_tanh)  LJLIB_REC(math_htrig IRCALL_tanh)
+LJLIB_ASM_(math_frexp)
+LJLIB_ASM_(math_modf)  LJLIB_REC(.)
+
+LJLIB_PUSH(57.29577951308232)
+LJLIB_ASM_(math_deg)   LJLIB_REC(math_degrad)
+
+LJLIB_PUSH(0.017453292519943295)
+LJLIB_ASM_(math_rad)   LJLIB_REC(math_degrad)
+
+LJLIB_ASM(math_log)LJLIB_REC(math_log)
+{
+  double x = lj_lib_checknum(L, 1);
+  if (L->base+1 < L->top) {
+double y = lj_lib_checknum(L, 2);
+#ifdef LUAJIT_NO_LOG2
+x = log(x); y = 1.0 / log(y);
+#else
+x = lj_vm_log2(x); y = 1.0 / lj_vm_log2(y);
+#endif
+setnumV(L->base-1, x*y);  /* Do NOT join the expression to x / y. */
+return FFH_RES(1);
+  }
+  return FFH_RETRY;
+}
+
+LJLIB_ASM(math_atan2)  LJLIB_REC(.)
+{
+  lj_lib_checknum(L, 1);
+  lj_lib_checknum(L, 2);
+  return FFH_RETRY;
+}
+LJLIB_ASM_(math_pow)   LJLIB_REC(.)
+LJLIB_ASM_(math_fmod)
+
+LJLIB_ASM(math_ldexp)  LJLIB_REC(.)
+{
+  lj_lib_checknum(L, 1);
+#if LJ_DUALNUM && !LJ_TARGET_X86ORX64
+  lj_lib_checkint(L, 2);
+#else
+  lj_lib_checknum(L, 2);
+#endif
+  return FFH_RETRY;
+}
+
+LJLIB_ASM(math_min)LJLIB_REC(math_minmax IR_MIN)
+{
+  int i = 0;
+  do { lj_lib_checknumber(L, ++i); } while (L->base+i < L->top);
+  return FFH_RETRY;
+}
+LJLIB_ASM_(math_max)   LJLIB_REC(math_minmax IR_MAX)
+
+LJLIB_PUSH(3.14159265358979323846) LJLIB_SET(pi)
+LJLIB_PUSH(1e310) LJLIB_SET(huge)
+
+/*  */
+
+/* This implements a Tausworthe PRNG with period 2^223. Based on:
+**   Tables of maximally-equidistributed combined LFSR generators,
+**   Pierre L'Ecuyer, 1991, table 3, 1st entry.
+** Full-period ME-CF generator with L=64, J=4, k=223, N1=49.
+*/
+
+/* PRNG state. */
+struct RandomState {
+  uint64_t gen[4]; /* State of the 4 LFSR generators. */
+  int valid;   /* State is valid. */
+};
+
+/* Union needed for bit-pattern conversion between uint64_t and double. */
+typedef union { uint64_t u64; double d; } U64double;
+
+/* Update generator i and compute a running xor of all states. */
+#define TW223_GEN(i, k, q, s) \
+  z = rs->gen[i]; \
+  z = (((z<> (k-s)) ^ ((z&((uint64_t)(int64_t)-1 << (64-k)))>= 8;
+u.d = d = d * 3.14159265358979323846 + 2.7182818284590452354;
+if (u.u64 < m) u.u64 += m;  /* Ensure k[i] MSB of gen[i] are non-zero. */
+rs->gen[i] = u.u64;
+  }
+  rs->valid = 1;
+  for (i = 0; i < 10; i++)
+lj_math_random_step(rs);
+}
+
+/* PRNG extract function. */
+LJLIB_PUSH(top-2)  /* Upvalue holds userdata with RandomState. */
+LJLIB_CF(math_random) 

[34/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/jit/bc.lua
--
diff --git a/lib/luajit/src/jit/bc.lua b/lib/luajit/src/jit/bc.lua
new file mode 100644
index 000..46a4089
--- /dev/null
+++ b/lib/luajit/src/jit/bc.lua
@@ -0,0 +1,191 @@
+
+-- LuaJIT bytecode listing module.
+--
+-- Copyright (C) 2005-2015 Mike Pall. All rights reserved.
+-- Released under the MIT license. See Copyright Notice in luajit.h
+
+--
+-- This module lists the bytecode of a Lua function. If it's loaded by -jbc
+-- it hooks into the parser and lists all functions of a chunk as they
+-- are parsed.
+--
+-- Example usage:
+--
+--   luajit -jbc -e 'local x=0; for i=1,1e6 do x=x+i end; print(x)'
+--   luajit -jbc=- foo.lua
+--   luajit -jbc=foo.list foo.lua
+--
+-- Default output is to stderr. To redirect the output to a file, pass a
+-- filename as an argument (use '-' for stdout) or set the environment
+-- variable LUAJIT_LISTFILE. The file is overwritten every time the module
+-- is started.
+--
+-- This module can also be used programmatically:
+--
+--   local bc = require("jit.bc")
+--
+--   local function foo() print("hello") end
+--
+--   bc.dump(foo)   --> -- BYTECODE -- [...]
+--   print(bc.line(foo, 2)) --> 0002KSTR 1   1  ; "hello"
+--
+--   local out = {
+-- -- Do something with each line:
+-- write = function(t, ...) io.write(...) end,
+-- close = function(t) end,
+-- flush = function(t) end,
+--   }
+--   bc.dump(foo, out)
+--
+--
+
+-- Cache some library functions and objects.
+local jit = require("jit")
+assert(jit.version_num == 20004, "LuaJIT core/library version mismatch")
+local jutil = require("jit.util")
+local vmdef = require("jit.vmdef")
+local bit = require("bit")
+local sub, gsub, format = string.sub, string.gsub, string.format
+local byte, band, shr = string.byte, bit.band, bit.rshift
+local funcinfo, funcbc, funck = jutil.funcinfo, jutil.funcbc, jutil.funck
+local funcuvname = jutil.funcuvname
+local bcnames = vmdef.bcnames
+local stdout, stderr = io.stdout, io.stderr
+
+--
+
+local function ctlsub(c)
+  if c == "\n" then return "\\n"
+  elseif c == "\r" then return "\\r"
+  elseif c == "\t" then return "\\t"
+  else return format("\\%03d", byte(c))
+  end
+end
+
+-- Return one bytecode line.
+local function bcline(func, pc, prefix)
+  local ins, m = funcbc(func, pc)
+  if not ins then return end
+  local ma, mb, mc = band(m, 7), band(m, 15*8), band(m, 15*128)
+  local a = band(shr(ins, 8), 0xff)
+  local oidx = 6*band(ins, 0xff)
+  local op = sub(bcnames, oidx+1, oidx+6)
+  local s = format("%04d %s %-6s %3s ",
+pc, prefix or "  ", op, ma == 0 and "" or a)
+  local d = shr(ins, 16)
+  if mc == 13*128 then -- BCMjump
+return format("%s=> %04d\n", s, pc+d-0x7fff)
+  end
+  if mb ~= 0 then
+d = band(d, 0xff)
+  elseif mc == 0 then
+return s.."\n"
+  end
+  local kc
+  if mc == 10*128 then -- BCMstr
+kc = funck(func, -d-1)
+kc = format(#kc > 40 and '"%.40s"~' or '"%s"', gsub(kc, "%c", ctlsub))
+  elseif mc == 9*128 then -- BCMnum
+kc = funck(func, d)
+if op == "TSETM " then kc = kc - 2^52 end
+  elseif mc == 12*128 then -- BCMfunc
+local fi = funcinfo(funck(func, -d-1))
+if fi.ffid then
+  kc = vmdef.ffnames[fi.ffid]
+else
+  kc = fi.loc
+end
+  elseif mc == 5*128 then -- BCMuv
+kc = funcuvname(func, d)
+  end
+  if ma == 5 then -- BCMuv
+local ka = funcuvname(func, a)
+if kc then kc = ka.." ; "..kc else kc = ka end
+  end
+  if mb ~= 0 then
+local b = shr(ins, 24)
+if kc then return format("%s%3d %3d  ; %s\n", s, b, d, kc) end
+return format("%s%3d %3d\n", s, b, d)
+  end
+  if kc then return format("%s%3d  ; %s\n", s, d, kc) end
+  if mc == 7*128 and d > 32767 then d = d - 65536 end -- BCMlits
+  return format("%s%3d\n", s, d)
+end
+
+-- Collect branch targets of a function.
+local function bctargets(func)
+  local target = {}
+  for pc=1,10 do
+local ins, m = funcbc(func, pc)
+if not ins then break end
+if band(m, 15*128) == 13*128 then target[pc+shr(ins, 16)-0x7fff] = true end
+  end
+  return target
+end
+
+-- Dump bytecode instructions of a function.
+local function bcdump(func, out, all)
+  if not out then out = stdout end
+  local fi = funcinfo(func)
+  if all and fi.children then
+for n=-1,-10,-1 do
+  local k = funck(func, n)
+  if not k then break end
+  if type(k) == "proto" then bcdump(k, out, true) end
+end
+  end
+  out:write(format("-- BYTECODE -- %s-%d\n", fi.loc, fi.lastlinedefined))
+  local target = bctargets(func)
+  for pc=1,1

[41/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/doc/ext_ffi_tutorial.html
--
diff --git a/lib/luajit/doc/ext_ffi_tutorial.html 
b/lib/luajit/doc/ext_ffi_tutorial.html
new file mode 100644
index 000..8f99bfb
--- /dev/null
+++ b/lib/luajit/doc/ext_ffi_tutorial.html
@@ -0,0 +1,601 @@
+http://www.w3.org/TR/html4/strict.dtd";>
+
+
+FFI Tutorial
+
+
+
+
+
+
+
+table.idiomtable { font-size: 90%; line-height: 1.2; }
+table.idiomtable tt { font-size: 100%; }
+table.idiomtable td { vertical-align: top; }
+tr.idiomhead td { font-weight: bold; }
+td.idiomlua b { font-weight: normal; color: #2142bf; }
+
+
+
+
+http://luajit.org";>LuaJIT
+
+
+FFI Tutorial
+
+
+
+LuaJIT
+
+http://luajit.org/download.html";>Download »
+
+Installation
+
+Running
+
+
+Extensions
+
+FFI Library
+
+FFI Tutorial
+
+ffi.* API
+
+FFI Semantics
+
+
+jit.* Library
+
+Lua/C API
+
+
+Status
+
+Changes
+
+
+FAQ
+
+http://luajit.org/performance.html";>Performance »
+
+http://wiki.luajit.org/";>Wiki »
+
+http://luajit.org/list.html";>Mailing List »
+
+
+
+
+This page is intended to give you an overview of the features of the FFI
+library by presenting a few use cases and guidelines.
+
+
+This page makes no attempt to explain all of the FFI library, though.
+You'll want to have a look at the ffi.* API
+function reference and the FFI
+semantics to learn more.
+
+
+Loading the FFI Library
+
+The FFI library is built into LuaJIT by default, but it's not loaded
+and initialized by default. The suggested way to use the FFI library
+is to add the following to the start of every Lua file that needs one
+of its functions:
+
+
+local ffi = require("ffi")
+
+
+Please note this doesn't define an ffi variable in the table
+of globals — you really need to use the local variable. The
+require function ensures the library is only loaded once.
+
+
+Note: If you want to experiment with the FFI from the interactive prompt
+of the command line executable, omit the local, as it doesn't
+preserve local variables across lines.
+
+
+Accessing Standard System Functions
+
+The following code explains how to access standard system functions.
+We slowly print two lines of dots by sleeping for 10 milliseconds
+after each dot:
+
+
+ 
+①
+
+
+
+
+
+②
+③
+④
+
+
+
+⑤
+
+
+
+
+
+⑥local ffi = require("ffi")
+ffi.cdef[[
+void Sleep(int ms);
+int poll(struct pollfd *fds, unsigned long nfds, int timeout);
+]]
+
+local sleep
+if ffi.os == "Windows" then
+  function sleep(s)
+ffi.C.Sleep(s*1000)
+  end
+else
+  function sleep(s)
+ffi.C.poll(nil, 0, s*1000)
+  end
+end
+
+for i=1,160 do
+  io.write("."); io.flush()
+  sleep(0.01)
+end
+io.write("\n")
+
+
+Here's the step-by-step explanation:
+
+
+① This defines the
+C library functions we're going to use. The part inside the
+double-brackets (in green) is just standard C syntax. You can
+usually get this info from the C header files or the
+documentation provided by each C library or C compiler.
+
+
+② The difficulty we're
+facing here, is that there are different standards to choose from.
+Windows has a simple Sleep() function. On other systems there
+are a variety of functions available to achieve sub-second sleeps, but
+with no clear consensus. Thankfully poll() can be used for
+this task, too, and it's present on most non-Windows systems. The
+check for ffi.os makes sure we use the Windows-specific
+function only on Windows systems.
+
+
+③ Here we're wrapping the
+call to the C function in a Lua function. This isn't strictly
+necessary, but it's helpful to deal with system-specific issues only
+in one part of the code. The way we're wrapping it ensures the check
+for the OS is only done during initialization and not for every call.
+
+
+④ A more subtle point is
+that we defined our sleep() function (for the sake of this
+example) as taking the number of seconds, but accepting fractional
+seconds. Multiplying this by 1000 gets us milliseconds, but that still
+leaves it a Lua number, which is a floating-point value. Alas, the
+Sleep() function only accepts an integer value. Luckily for
+us, the FFI library automatically performs the conversion when calling
+the function (truncating the FP value towards zero, like in C).
+
+
+Some readers will notice that Sleep() is part of
+KERNEL32.DLL and is also a stdcall function. So how
+can this possibly work? The FFI library provides the ffi.C
+default C library namespace, which allows calling functions from
+the default set of libraries, like a C compiler would. Also, the
+FFI library automatically detects stdcall functions, so you
+don't need to declare them as such.
+
+
+⑤ The poll()
+function takes a couple more arguments we're not going to use. You can
+simply use nil to pass a NULL pointer and 0
+for the nfds parameter. Please note that the
+number 0 does not convert to a pointer value,
+unlike in C++. You really have to pass pointers to pointer arguments
+and numbers to number argument

[38/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/dynasm/dasm_x86.h
--
diff --git a/lib/luajit/dynasm/dasm_x86.h b/lib/luajit/dynasm/dasm_x86.h
new file mode 100644
index 000..652e8c9
--- /dev/null
+++ b/lib/luajit/dynasm/dasm_x86.h
@@ -0,0 +1,471 @@
+/*
+** DynASM x86 encoding engine.
+** Copyright (C) 2005-2015 Mike Pall. All rights reserved.
+** Released under the MIT license. See dynasm.lua for full copyright notice.
+*/
+
+#include 
+#include 
+#include 
+#include 
+
+#define DASM_ARCH  "x86"
+
+#ifndef DASM_EXTERN
+#define DASM_EXTERN(a,b,c,d)   0
+#endif
+
+/* Action definitions. DASM_STOP must be 255. */
+enum {
+  DASM_DISP = 233,
+  DASM_IMM_S, DASM_IMM_B, DASM_IMM_W, DASM_IMM_D, DASM_IMM_WB, DASM_IMM_DB,
+  DASM_VREG, DASM_SPACE, DASM_SETLABEL, DASM_REL_A, DASM_REL_LG, DASM_REL_PC,
+  DASM_IMM_LG, DASM_IMM_PC, DASM_LABEL_LG, DASM_LABEL_PC, DASM_ALIGN,
+  DASM_EXTERN, DASM_ESC, DASM_MARK, DASM_SECTION, DASM_STOP
+};
+
+/* Maximum number of section buffer positions for a single dasm_put() call. */
+#define DASM_MAXSECPOS 25
+
+/* DynASM encoder status codes. Action list offset or number are or'ed in. */
+#define DASM_S_OK  0x
+#define DASM_S_NOMEM   0x0100
+#define DASM_S_PHASE   0x0200
+#define DASM_S_MATCH_SEC   0x0300
+#define DASM_S_RANGE_I 0x1100
+#define DASM_S_RANGE_SEC   0x1200
+#define DASM_S_RANGE_LG0x1300
+#define DASM_S_RANGE_PC0x1400
+#define DASM_S_RANGE_VREG  0x1500
+#define DASM_S_UNDEF_L 0x2100
+#define DASM_S_UNDEF_PC0x2200
+
+/* Macros to convert positions (8 bit section + 24 bit index). */
+#define DASM_POS2IDX(pos)  ((pos)&0x00ff)
+#define DASM_POS2BIAS(pos) ((pos)&0xff00)
+#define DASM_SEC2POS(sec)  ((sec)<<24)
+#define DASM_POS2SEC(pos)  ((pos)>>24)
+#define DASM_POS2PTR(D, pos)   (D->sections[DASM_POS2SEC(pos)].rbuf + (pos))
+
+/* Action list type. */
+typedef const unsigned char *dasm_ActList;
+
+/* Per-section structure. */
+typedef struct dasm_Section {
+  int *rbuf;   /* Biased buffer pointer (negative section bias). */
+  int *buf;/* True buffer pointer. */
+  size_t bsize;/* Buffer size in bytes. */
+  int pos; /* Biased buffer position. */
+  int epos;/* End of biased buffer position - max single put. */
+  int ofs; /* Byte offset into section. */
+} dasm_Section;
+
+/* Core structure holding the DynASM encoding state. */
+struct dasm_State {
+  size_t psize;/* Allocated size of this structure. */
+  dasm_ActList actionlist; /* Current actionlist pointer. */
+  int *lglabels;   /* Local/global chain/pos ptrs. */
+  size_t lgsize;
+  int *pclabels;   /* PC label chains/pos ptrs. */
+  size_t pcsize;
+  void **globals;  /* Array of globals (bias -10). */
+  dasm_Section *section;   /* Pointer to active section. */
+  size_t codesize; /* Total size of all code sections. */
+  int maxsection;  /* 0 <= sectionidx < maxsection. */
+  int status;  /* Status code. */
+  dasm_Section sections[1];/* All sections. Alloc-extended. */
+};
+
+/* The size of the core structure depends on the max. number of sections. */
+#define DASM_PSZ(ms)   (sizeof(dasm_State)+(ms-1)*sizeof(dasm_Section))
+
+
+/* Initialize DynASM state. */
+void dasm_init(Dst_DECL, int maxsection)
+{
+  dasm_State *D;
+  size_t psz = 0;
+  int i;
+  Dst_REF = NULL;
+  DASM_M_GROW(Dst, struct dasm_State, Dst_REF, psz, DASM_PSZ(maxsection));
+  D = Dst_REF;
+  D->psize = psz;
+  D->lglabels = NULL;
+  D->lgsize = 0;
+  D->pclabels = NULL;
+  D->pcsize = 0;
+  D->globals = NULL;
+  D->maxsection = maxsection;
+  for (i = 0; i < maxsection; i++) {
+D->sections[i].buf = NULL;  /* Need this for pass3. */
+D->sections[i].rbuf = D->sections[i].buf - DASM_SEC2POS(i);
+D->sections[i].bsize = 0;
+D->sections[i].epos = 0;  /* Wrong, but is recalculated after resize. */
+  }
+}
+
+/* Free DynASM state. */
+void dasm_free(Dst_DECL)
+{
+  dasm_State *D = Dst_REF;
+  int i;
+  for (i = 0; i < D->maxsection; i++)
+if (D->sections[i].buf)
+  DASM_M_FREE(Dst, D->sections[i].buf, D->sections[i].bsize);
+  if (D->pclabels) DASM_M_FREE(Dst, D->pclabels, D->pcsize);
+  if (D->lglabels) DASM_M_FREE(Dst, D->lglabels, D->lgsize);
+  DASM_M_FREE(Dst, D, D->psize);
+}
+
+/* Setup global label array. Must be called before dasm_setup(). */
+void dasm_setupglobal(Dst_DECL, void **gl, unsigned int maxgl)
+{
+  dasm_State *D = Dst_REF;
+  D->globals = gl - 10;  /* Negative bias to compensate for locals. */
+  DASM_M_GROW(Dst, int, D->lglabels, D->lgsize, (10+maxgl)*sizeof(int));
+}
+
+/* Grow PC label array. Can be called after dasm_setup(), too. */

[18/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_frame.h
--
diff --git a/lib/luajit/src/lj_frame.h b/lib/luajit/src/lj_frame.h
new file mode 100644
index 000..cd57be2
--- /dev/null
+++ b/lib/luajit/src/lj_frame.h
@@ -0,0 +1,183 @@
+/*
+** Stack frames.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#ifndef _LJ_FRAME_H
+#define _LJ_FRAME_H
+
+#include "lj_obj.h"
+#include "lj_bc.h"
+
+/* -- Lua stack frame - */
+
+/* Frame type markers in callee function slot (callee base-1). */
+enum {
+  FRAME_LUA, FRAME_C, FRAME_CONT, FRAME_VARG,
+  FRAME_LUAP, FRAME_CP, FRAME_PCALL, FRAME_PCALLH
+};
+#define FRAME_TYPE 3
+#define FRAME_P4
+#define FRAME_TYPEP(FRAME_TYPE|FRAME_P)
+
+/* Macros to access and modify Lua frames. */
+#define frame_gc(f)(gcref((f)->fr.func))
+#define frame_func(f)  (&frame_gc(f)->fn)
+#define frame_ftsz(f)  ((f)->fr.tp.ftsz)
+
+#define frame_type(f)  (frame_ftsz(f) & FRAME_TYPE)
+#define frame_typep(f) (frame_ftsz(f) & FRAME_TYPEP)
+#define frame_islua(f) (frame_type(f) == FRAME_LUA)
+#define frame_isc(f)   (frame_type(f) == FRAME_C)
+#define frame_iscont(f)(frame_typep(f) == FRAME_CONT)
+#define frame_isvarg(f)(frame_typep(f) == FRAME_VARG)
+#define frame_ispcall(f)   ((frame_ftsz(f) & 6) == FRAME_PCALL)
+
+#define frame_pc(f)(mref((f)->fr.tp.pcr, const BCIns))
+#define frame_contpc(f)(frame_pc((f)-1))
+#if LJ_64
+#define frame_contf(f) \
+  ((ASMFunction)(void *)((intptr_t)lj_vm_asm_begin + \
+(intptr_t)(int32_t)((f)-1)->u32.lo))
+#else
+#define frame_contf(f) ((ASMFunction)gcrefp(((f)-1)->gcr, void))
+#endif
+#define frame_delta(f) (frame_ftsz(f) >> 3)
+#define frame_sized(f) (frame_ftsz(f) & ~FRAME_TYPEP)
+
+#define frame_prevl(f) ((f) - (1+bc_a(frame_pc(f)[-1])))
+#define frame_prevd(f) ((TValue *)((char *)(f) - frame_sized(f)))
+#define frame_prev(f)  (frame_islua(f)?frame_prevl(f):frame_prevd(f))
+/* Note: this macro does not skip over FRAME_VARG. */
+
+#define setframe_pc(f, pc) (setmref((f)->fr.tp.pcr, (pc)))
+#define setframe_ftsz(f, sz)   ((f)->fr.tp.ftsz = (sz))
+#define setframe_gc(f, p)  (setgcref((f)->fr.func, (p)))
+
+/* -- C stack frame --- */
+
+/* Macros to access and modify the C stack frame chain. */
+
+/* These definitions must match with the arch-specific *.dasc files. */
+#if LJ_TARGET_X86
+#define CFRAME_OFS_ERRF(15*4)
+#define CFRAME_OFS_NRES(14*4)
+#define CFRAME_OFS_PREV(13*4)
+#define CFRAME_OFS_L   (12*4)
+#define CFRAME_OFS_PC  (6*4)
+#define CFRAME_OFS_MULTRES (5*4)
+#define CFRAME_SIZE(12*4)
+#define CFRAME_SHIFT_MULTRES   0
+#elif LJ_TARGET_X64
+#if LJ_ABI_WIN
+#define CFRAME_OFS_PREV(13*8)
+#define CFRAME_OFS_PC  (25*4)
+#define CFRAME_OFS_L   (24*4)
+#define CFRAME_OFS_ERRF(23*4)
+#define CFRAME_OFS_NRES(22*4)
+#define CFRAME_OFS_MULTRES (21*4)
+#define CFRAME_SIZE(10*8)
+#define CFRAME_SIZE_JIT(CFRAME_SIZE + 9*16 + 4*8)
+#define CFRAME_SHIFT_MULTRES   0
+#else
+#define CFRAME_OFS_PREV(4*8)
+#define CFRAME_OFS_PC  (7*4)
+#define CFRAME_OFS_L   (6*4)
+#define CFRAME_OFS_ERRF(5*4)
+#define CFRAME_OFS_NRES(4*4)
+#define CFRAME_OFS_MULTRES (1*4)
+#define CFRAME_SIZE(10*8)
+#define CFRAME_SIZE_JIT(CFRAME_SIZE + 16)
+#define CFRAME_SHIFT_MULTRES   0
+#endif
+#elif LJ_TARGET_ARM
+#define CFRAME_OFS_ERRF24
+#define CFRAME_OFS_NRES20
+#define CFRAME_OFS_PREV16
+#define CFRAME_OFS_L   12
+#define CFRAME_OFS_PC  8
+#define CFRAME_OFS_MULTRES 4
+#if LJ_ARCH_HASFPU
+#define CFRAME_SIZE128
+#else
+#define CFRAME_SIZE64
+#endif
+#define CFRAME_SHIFT_MULTRES   3
+#elif LJ_TARGET_PPC
+#if LJ_TARGET_XBOX360
+#define CFRAME_OFS_ERRF424
+#define CFRAME_OFS_NRES420
+#define CFRAME_OFS_PREV400
+#define CFRAME_OFS_L   416
+#define CFRAME_OFS_PC  412
+#define CFRAME_OFS_MULTRES 408
+#define CFRAME_SIZE384
+#define CFRAME_SHIFT_MULTRES   3
+#elif LJ_ARCH_PPC64
+#define CFRAME_OFS_ERRF472
+#define CFRAME_OFS_NRES468
+#define CFRAME_OFS_PREV448
+#define CFRAME_OFS_L   464
+#define CFRAME_OFS_PC  460
+#define CFRAME_OFS_MULTRES 456
+#define CFRAME_SIZE400
+#define CFRAME_SHIFT_MULTRES 

[39/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/dynasm/dasm_mips.lua
--
diff --git a/lib/luajit/dynasm/dasm_mips.lua b/lib/luajit/dynasm/dasm_mips.lua
new file mode 100644
index 000..ae0dbd7
--- /dev/null
+++ b/lib/luajit/dynasm/dasm_mips.lua
@@ -0,0 +1,953 @@
+--
+-- DynASM MIPS module.
+--
+-- Copyright (C) 2005-2015 Mike Pall. All rights reserved.
+-- See dynasm.lua for full copyright notice.
+--
+
+-- Module information:
+local _info = {
+  arch =   "mips",
+  description ="DynASM MIPS module",
+  version ="1.3.0",
+  vernum =  10300,
+  release ="2012-01-23",
+  author = "Mike Pall",
+  license ="MIT",
+}
+
+-- Exported glue functions for the arch-specific module.
+local _M = { _info = _info }
+
+-- Cache library functions.
+local type, tonumber, pairs, ipairs = type, tonumber, pairs, ipairs
+local assert, setmetatable = assert, setmetatable
+local _s = string
+local sub, format, byte, char = _s.sub, _s.format, _s.byte, _s.char
+local match, gmatch = _s.match, _s.gmatch
+local concat, sort = table.concat, table.sort
+local bit = bit or require("bit")
+local band, shl, sar, tohex = bit.band, bit.lshift, bit.arshift, bit.tohex
+
+-- Inherited tables and callbacks.
+local g_opt, g_arch
+local wline, werror, wfatal, wwarn
+
+-- Action name list.
+-- CHECK: Keep this in sync with the C code!
+local action_names = {
+  "STOP", "SECTION", "ESC", "REL_EXT",
+  "ALIGN", "REL_LG", "LABEL_LG",
+  "REL_PC", "LABEL_PC", "IMM",
+}
+
+-- Maximum number of section buffer positions for dasm_put().
+-- CHECK: Keep this in sync with the C code!
+local maxsecpos = 25 -- Keep this low, to avoid excessively long C lines.
+
+-- Action name -> action number.
+local map_action = {}
+for n,name in ipairs(action_names) do
+  map_action[name] = n-1
+end
+
+-- Action list buffer.
+local actlist = {}
+
+-- Argument list for next dasm_put(). Start with offset 0 into action list.
+local actargs = { 0 }
+
+-- Current number of section buffer positions for dasm_put().
+local secpos = 1
+
+--
+
+-- Dump action names and numbers.
+local function dumpactions(out)
+  out:write("DynASM encoding engine action codes:\n")
+  for n,name in ipairs(action_names) do
+local num = map_action[name]
+out:write(format("  %-10s %02X  %d\n", name, num, num))
+  end
+  out:write("\n")
+end
+
+-- Write action list buffer as a huge static C array.
+local function writeactions(out, name)
+  local nn = #actlist
+  if nn == 0 then nn = 1; actlist[0] = map_action.STOP end
+  out:write("static const unsigned int ", name, "[", nn, "] = {\n")
+  for i = 1,nn-1 do
+assert(out:write("0x", tohex(actlist[i]), ",\n"))
+  end
+  assert(out:write("0x", tohex(actlist[nn]), "\n};\n\n"))
+end
+
+--
+
+-- Add word to action list.
+local function wputxw(n)
+  assert(n >= 0 and n <= 0x and n % 1 == 0, "word out of range")
+  actlist[#actlist+1] = n
+end
+
+-- Add action to list with optional arg. Advance buffer pos, too.
+local function waction(action, val, a, num)
+  local w = assert(map_action[action], "bad action name `"..action.."'")
+  wputxw(0xff00 + w * 0x1 + (val or 0))
+  if a then actargs[#actargs+1] = a end
+  if a or num then secpos = secpos + (num or 1) end
+end
+
+-- Flush action list (intervening C code or buffer pos overflow).
+local function wflush(term)
+  if #actlist == actargs[1] then return end -- Nothing to flush.
+  if not term then waction("STOP") end -- Terminate action list.
+  wline(format("dasm_put(Dst, %s);", concat(actargs, ", ")), true)
+  actargs = { #actlist } -- Actionlist offset is 1st arg to next dasm_put().
+  secpos = 1 -- The actionlist offset occupies a buffer position, too.
+end
+
+-- Put escaped word.
+local function wputw(n)
+  if n >= 0xff00 then waction("ESC") end
+  wputxw(n)
+end
+
+-- Reserve position for word.
+local function wpos()
+  local pos = #actlist+1
+  actlist[pos] = ""
+  return pos
+end
+
+-- Store word to reserved position.
+local function wputpos(pos, n)
+  assert(n >= 0 and n <= 0x and n % 1 == 0, "word out of range")
+  actlist[pos] = n
+end
+
+--
+
+-- Global label name -> global label number. With auto assignment on 1st use.
+local next_global = 20
+local map_global = setmetatable({}, { __index = function(t, name)
+  if not match(name, "^[%a_][%w_]*$") then werror("bad global label") end
+  local n = next_global
+  if n > 2047 then werror("too many global labels") end
+  next_global = n + 1
+  t[name] = n
+  return n
+end})
+
+-- Dump global labels.
+local function du

[02/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/xedkbuild.bat
--
diff --git a/lib/luajit/src/xedkbuild.bat b/lib/luajit/src/xedkbuild.bat
new file mode 100644
index 000..240ec87
--- /dev/null
+++ b/lib/luajit/src/xedkbuild.bat
@@ -0,0 +1,92 @@
+@rem Script to build LuaJIT with the Xbox 360 SDK.
+@rem Donated to the public domain.
+@rem
+@rem Open a "Visual Studio .NET Command Prompt" (32 bit host compiler)
+@rem Then cd to this directory and run this script.
+
+@if not defined INCLUDE goto :FAIL
+@if not defined XEDK goto :FAIL
+
+@setlocal
+@rem  Host compiler 
+@set LJCOMPILE=cl /nologo /c /MD /O2 /W3 /D_CRT_SECURE_NO_DEPRECATE
+@set LJLINK=link /nologo
+@set LJMT=mt /nologo
+@set DASMDIR=..\dynasm
+@set DASM=%DASMDIR%\dynasm.lua
+@set ALL_LIB=lib_base.c lib_math.c lib_bit.c lib_string.c lib_table.c lib_io.c 
lib_os.c lib_package.c lib_debug.c lib_jit.c lib_ffi.c
+
+%LJCOMPILE% host\minilua.c
+@if errorlevel 1 goto :BAD
+%LJLINK% /out:minilua.exe minilua.obj
+@if errorlevel 1 goto :BAD
+if exist minilua.exe.manifest^
+  %LJMT% -manifest minilua.exe.manifest -outputresource:minilua.exe
+
+@rem Error out for 64 bit host compiler
+@minilua
+@if errorlevel 8 goto :FAIL
+
+@set DASMFLAGS=-D GPR64 -D FRAME32 -D PPE -D SQRT -D DUALNUM
+minilua %DASM% -LN %DASMFLAGS% -o host\buildvm_arch.h vm_ppc.dasc
+@if errorlevel 1 goto :BAD
+
+%LJCOMPILE% /I "." /I %DASMDIR% /D_XBOX_VER=200 
/DLUAJIT_TARGET=LUAJIT_ARCH_PPC  host\buildvm*.c
+@if errorlevel 1 goto :BAD
+%LJLINK% /out:buildvm.exe buildvm*.obj
+@if errorlevel 1 goto :BAD
+if exist buildvm.exe.manifest^
+  %LJMT% -manifest buildvm.exe.manifest -outputresource:buildvm.exe
+
+buildvm -m peobj -o lj_vm.obj
+@if errorlevel 1 goto :BAD
+buildvm -m bcdef -o lj_bcdef.h %ALL_LIB%
+@if errorlevel 1 goto :BAD
+buildvm -m ffdef -o lj_ffdef.h %ALL_LIB%
+@if errorlevel 1 goto :BAD
+buildvm -m libdef -o lj_libdef.h %ALL_LIB%
+@if errorlevel 1 goto :BAD
+buildvm -m recdef -o lj_recdef.h %ALL_LIB%
+@if errorlevel 1 goto :BAD
+buildvm -m vmdef -o jit\vmdef.lua %ALL_LIB%
+@if errorlevel 1 goto :BAD
+buildvm -m folddef -o lj_folddef.h lj_opt_fold.c
+@if errorlevel 1 goto :BAD
+
+@rem  Cross compiler 
+@set LJCOMPILE="%XEDK%\bin\win32\cl" /nologo /c /MT /O2 /W3 /GF /Gm- /GR- /GS- 
/Gy /openmp- /D_CRT_SECURE_NO_DEPRECATE /DNDEBUG /D_XBOX /D_LIB 
/DLUAJIT_USE_SYSMALLOC
+@set LJLIB="%XEDK%\bin\win32\lib" /nologo
+@set "INCLUDE=%XEDK%\include\xbox"
+
+@if "%1" neq "debug" goto :NODEBUG
+@shift
+@set "LJCOMPILE=%LJCOMPILE% /Zi"
+:NODEBUG
+@if "%1"=="amalg" goto :AMALG
+%LJCOMPILE% /DLUA_BUILD_AS_DLL lj_*.c lib_*.c
+@if errorlevel 1 goto :BAD
+%LJLIB% /OUT:luajit20.lib lj_*.obj lib_*.obj
+@if errorlevel 1 goto :BAD
+@goto :NOAMALG
+:AMALG
+%LJCOMPILE% /DLUA_BUILD_AS_DLL ljamalg.c
+@if errorlevel 1 goto :BAD
+%LJLIB% /OUT:luajit20.lib ljamalg.obj lj_vm.obj
+@if errorlevel 1 goto :BAD
+:NOAMALG
+
+@del *.obj *.manifest minilua.exe buildvm.exe
+@echo.
+@echo === Successfully built LuaJIT for Xbox 360 ===
+
+@goto :END
+:BAD
+@echo.
+@echo ***
+@echo *** Build FAILED -- Please check the error messages ***
+@echo ***
+@goto :END
+:FAIL
+@echo To run this script you must open a "Visual Studio .NET Command Prompt"
+@echo (32 bit host compiler). The Xbox 360 SDK must be installed, too.
+:END



[17/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_ir.h
--
diff --git a/lib/luajit/src/lj_ir.h b/lib/luajit/src/lj_ir.h
new file mode 100644
index 000..8126482
--- /dev/null
+++ b/lib/luajit/src/lj_ir.h
@@ -0,0 +1,551 @@
+/*
+** SSA IR (Intermediate Representation) format.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#ifndef _LJ_IR_H
+#define _LJ_IR_H
+
+#include "lj_obj.h"
+
+/* -- IR instructions - */
+
+/* IR instruction definition. Order matters, see below. ORDER IR */
+#define IRDEF(_) \
+  /* Guarded assertions. */ \
+  /* Must be properly aligned to flip opposites (^1) and (un)ordered (^4). */ \
+  _(LT,N , ref, ref) \
+  _(GE,N , ref, ref) \
+  _(LE,N , ref, ref) \
+  _(GT,N , ref, ref) \
+  \
+  _(ULT,   N , ref, ref) \
+  _(UGE,   N , ref, ref) \
+  _(ULE,   N , ref, ref) \
+  _(UGT,   N , ref, ref) \
+  \
+  _(EQ,C , ref, ref) \
+  _(NE,C , ref, ref) \
+  \
+  _(ABC,   N , ref, ref) \
+  _(RETF,  S , ref, ref) \
+  \
+  /* Miscellaneous ops. */ \
+  _(NOP,   N , ___, ___) \
+  _(BASE,  N , lit, lit) \
+  _(PVAL,  N , lit, ___) \
+  _(GCSTEP,S , ___, ___) \
+  _(HIOP,  S , ref, ref) \
+  _(LOOP,  S , ___, ___) \
+  _(USE,   S , ref, ___) \
+  _(PHI,   S , ref, ref) \
+  _(RENAME,S , ref, lit) \
+  \
+  /* Constants. */ \
+  _(KPRI,  N , ___, ___) \
+  _(KINT,  N , cst, ___) \
+  _(KGC,   N , cst, ___) \
+  _(KPTR,  N , cst, ___) \
+  _(KKPTR, N , cst, ___) \
+  _(KNULL, N , cst, ___) \
+  _(KNUM,  N , cst, ___) \
+  _(KINT64,N , cst, ___) \
+  _(KSLOT, N , ref, lit) \
+  \
+  /* Bit ops. */ \
+  _(BNOT,  N , ref, ___) \
+  _(BSWAP, N , ref, ___) \
+  _(BAND,  C , ref, ref) \
+  _(BOR,   C , ref, ref) \
+  _(BXOR,  C , ref, ref) \
+  _(BSHL,  N , ref, ref) \
+  _(BSHR,  N , ref, ref) \
+  _(BSAR,  N , ref, ref) \
+  _(BROL,  N , ref, ref) \
+  _(BROR,  N , ref, ref) \
+  \
+  /* Arithmetic ops. ORDER ARITH */ \
+  _(ADD,   C , ref, ref) \
+  _(SUB,   N , ref, ref) \
+  _(MUL,   C , ref, ref) \
+  _(DIV,   N , ref, ref) \
+  _(MOD,   N , ref, ref) \
+  _(POW,   N , ref, ref) \
+  _(NEG,   N , ref, ref) \
+  \
+  _(ABS,   N , ref, ref) \
+  _(ATAN2, N , ref, ref) \
+  _(LDEXP, N , ref, ref) \
+  _(MIN,   C , ref, ref) \
+  _(MAX,   C , ref, ref) \
+  _(FPMATH,N , ref, lit) \
+  \
+  /* Overflow-checking arithmetic ops. */ \
+  _(ADDOV, CW, ref, ref) \
+  _(SUBOV, NW, ref, ref) \
+  _(MULOV, CW, ref, ref) \
+  \
+  /* Memory ops. A = array, H = hash, U = upvalue, F = field, S = stack. */ \
+  \
+  /* Memory references. */ \
+  _(AREF,  R , ref, ref) \
+  _(HREFK, R , ref, ref) \
+  _(HREF,  L , ref, ref) \
+  _(NEWREF,S , ref, ref) \
+  _(UREFO, LW, ref, lit) \
+  _(UREFC, LW, ref, lit) \
+  _(FREF,  R , ref, lit) \
+  _(STRREF,N , ref, ref) \
+  \
+  /* Loads and Stores. These must be in the same order. */ \
+  _(ALOAD, L , ref, ___) \
+  _(HLOAD, L , ref, ___) \
+  _(ULOAD, L , ref, ___) \
+  _(FLOAD, L , ref, lit) \
+  _(XLOAD, L , ref, lit) \
+  _(SLOAD, L , lit, lit) \
+  _(VLOAD, L , ref, ___) \
+  \
+  _(ASTORE,S , ref, ref) \
+  _(HSTORE,S , ref, ref) \
+  _(USTORE,S , ref, ref) \
+  _(FSTORE,S , ref, ref) \
+  _(XSTORE,S , ref, ref) \
+  \
+  /* Allocations. */ \
+  _(SNEW,  N , ref, ref)  /* CSE is ok, not marked as A. */ \
+  _(XSNEW, A , ref, ref) \
+  _(TNEW,  AW, lit, lit) \
+  _(TDUP,  AW, ref, ___) \
+  _(CNEW,  AW, ref, ref) \
+  _(CNEWI, NW, ref, ref)  /* CSE is ok, not marked as A. */ \
+  \
+  /* Barriers. */ \
+  _(TBAR,  S , ref, ___) \
+  _(OBAR,  S , ref, ref) \
+  _(XBAR,  S , ___, ___) \
+  \
+  /* Type conversions. */ \
+  _(CONV,  NW, ref, lit) \
+  _(TOBIT, N , ref, ref) \
+  _(TOSTR, N , ref, ___) \
+  _(STRTO, N , ref, ___) \
+  \
+  /* Calls. */ \
+  _(CALLN, N , ref, lit) \
+  _(CALLL, L , ref, lit) \
+  _(CALLS, S , ref, lit) \
+  _(CALLXS,S , ref, ref) \
+  _(CARG,  N , ref, ref) \
+  \
+  /* End of list. */
+
+/* IR opcodes (max. 256). */
+typedef enum {
+#define IRENUM(name, m, m1, m2)IR_##name,
+IRDEF(IRENUM)
+#undef IRENUM
+  IR__MAX
+} IROp;
+
+/* Stored opcode. */
+typedef uint8_t IROp1;
+
+LJ_STATIC_ASSERT(((int)IR_EQ^1) == (int)IR_NE);
+LJ_STATIC_ASSERT(((int)IR_LT^1) == (int)IR_GE);
+LJ_STATIC_ASSERT(((int)IR_LE^1) == (int)IR_GT);
+LJ_STATIC_ASSERT(((int)IR_LT^3) == (int)IR_GT);
+LJ_STATIC_ASSERT(((int)IR_LT^4) == (int)IR_ULT);
+
+/* Delta between xLOAD and xSTORE. */
+#define IRDELTA_L2S((int)IR_ASTORE - (int

[43/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
TS-3783 TS-3030 Add luajit v2.0.4 as a subtree


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/1f27b840
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/1f27b840
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/1f27b840

Branch: refs/heads/master
Commit: 1f27b84077756cc0a0ad07459ba59797bec826d9
Parents: 0faed06
Author: Leif Hedstrom 
Authored: Thu Jul 23 12:45:57 2015 +0200
Committer: Leif Hedstrom 
Committed: Thu Jul 23 13:03:18 2015 +0200

--
 lib/luajit/.gitignore |   11 +
 lib/luajit/COPYRIGHT  |   56 +
 lib/luajit/Makefile   |  151 +
 lib/luajit/README |   16 +
 lib/luajit/doc/bluequad-print.css |  166 +
 lib/luajit/doc/bluequad.css   |  325 ++
 lib/luajit/doc/changes.html   |  978 
 lib/luajit/doc/contact.html   |  102 +
 lib/luajit/doc/ext_c_api.html |  187 +
 lib/luajit/doc/ext_ffi.html   |  330 ++
 lib/luajit/doc/ext_ffi_api.html   |  566 ++
 lib/luajit/doc/ext_ffi_semantics.html | 1245 +
 lib/luajit/doc/ext_ffi_tutorial.html  |  601 +++
 lib/luajit/doc/ext_jit.html   |  199 +
 lib/luajit/doc/extensions.html|  408 ++
 lib/luajit/doc/faq.html   |  184 +
 lib/luajit/doc/img/contact.png|  Bin 0 -> 1340 bytes
 lib/luajit/doc/install.html   |  646 +++
 lib/luajit/doc/luajit.html|  234 +
 lib/luajit/doc/running.html   |  306 ++
 lib/luajit/doc/status.html|  116 +
 lib/luajit/dynasm/dasm_arm.h  |  456 ++
 lib/luajit/dynasm/dasm_arm.lua| 1125 
 lib/luajit/dynasm/dasm_mips.h |  416 ++
 lib/luajit/dynasm/dasm_mips.lua   |  953 
 lib/luajit/dynasm/dasm_ppc.h  |  412 ++
 lib/luajit/dynasm/dasm_ppc.lua| 1249 +
 lib/luajit/dynasm/dasm_proto.h|   83 +
 lib/luajit/dynasm/dasm_x64.lua|   12 +
 lib/luajit/dynasm/dasm_x86.h  |  471 ++
 lib/luajit/dynasm/dasm_x86.lua| 1945 +++
 lib/luajit/dynasm/dynasm.lua  | 1094 
 lib/luajit/etc/luajit.1   |   88 +
 lib/luajit/etc/luajit.pc  |   25 +
 lib/luajit/src/.gitignore |7 +
 lib/luajit/src/Makefile   |  684 +++
 lib/luajit/src/Makefile.dep   |  226 +
 lib/luajit/src/host/.gitignore|3 +
 lib/luajit/src/host/README|4 +
 lib/luajit/src/host/buildvm.c |  516 ++
 lib/luajit/src/host/buildvm.h |  104 +
 lib/luajit/src/host/buildvm_asm.c |  313 ++
 lib/luajit/src/host/buildvm_fold.c|  229 +
 lib/luajit/src/host/buildvm_lib.c |  398 ++
 lib/luajit/src/host/buildvm_peobj.c   |  368 ++
 lib/luajit/src/host/genminilua.lua|  428 ++
 lib/luajit/src/host/minilua.c | 7770 
 lib/luajit/src/jit/.gitignore |1 +
 lib/luajit/src/jit/bc.lua |  191 +
 lib/luajit/src/jit/bcsave.lua |  659 +++
 lib/luajit/src/jit/dis_arm.lua|  689 +++
 lib/luajit/src/jit/dis_mips.lua   |  428 ++
 lib/luajit/src/jit/dis_mipsel.lua |   20 +
 lib/luajit/src/jit/dis_ppc.lua|  591 +++
 lib/luajit/src/jit/dis_x64.lua|   20 +
 lib/luajit/src/jit/dis_x86.lua|  836 +++
 lib/luajit/src/jit/dump.lua   |  699 +++
 lib/luajit/src/jit/v.lua  |  167 +
 lib/luajit/src/lauxlib.h  |  167 +
 lib/luajit/src/lib_aux.c  |  356 ++
 lib/luajit/src/lib_base.c |  683 +++
 lib/luajit/src/lib_bit.c  |   74 +
 lib/luajit/src/lib_debug.c|  405 ++
 lib/luajit/src/lib_ffi.c  |  851 +++
 lib/luajit/src/lib_init.c |   55 +
 lib/luajit/src/lib_io.c   |  539 ++
 lib/luajit/src/lib_jit.c  |  663 +++
 lib/luajit/src/lib_math.c |  233 +
 lib/luajit/src/lib_os.c   |  287 +
 lib/luajit/src/lib_package.c  |  602 +++
 lib/luajit/src/lib_string.c   |  940 
 lib/luajit/src/lib_table.c|  300 ++
 lib/luajit/src/lj.supp|   26 +
 lib/luajit/src/lj_alloc.c | 1396 +
 lib/luajit/src/lj_alloc.h |   17 +
 lib/luajit/src/lj_api.c   | 1200 +
 lib/luajit/src/lj_arch.h  |  437 ++
 lib/luajit/src/lj_asm.c   | 1920 +++
 lib/luajit/src/lj_asm.h   |   17 +
 lib/luajit/src/lj_asm_arm.h   | 2361 +
 lib/luajit/src/lj_asm_mips.h  | 1977 +++
 lib/luajit/src/lj_asm_ppc.h   | 2169 
 lib/luajit/src/lj_asm_x86.h   | 2806 ++
 lib/luajit/src/lj_bc.c|   14 +
 lib/luajit/src/lj_bc.h|  261 +
 lib/luajit/src/lj_bcdump.h|   66 +
 lib/luajit/src/lj_bcread.c|  476 ++
 lib/luajit/src/lj_bcwrite.c

[26/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_asm_ppc.h
--
diff --git a/lib/luajit/src/lj_asm_ppc.h b/lib/luajit/src/lj_asm_ppc.h
new file mode 100644
index 000..2c5d74a
--- /dev/null
+++ b/lib/luajit/src/lj_asm_ppc.h
@@ -0,0 +1,2169 @@
+/*
+** PPC IR assembler (SSA IR -> machine code).
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+/* -- Register allocator extensions --- */
+
+/* Allocate a register with a hint. */
+static Reg ra_hintalloc(ASMState *as, IRRef ref, Reg hint, RegSet allow)
+{
+  Reg r = IR(ref)->r;
+  if (ra_noreg(r)) {
+if (!ra_hashint(r) && !iscrossref(as, ref))
+  ra_sethint(IR(ref)->r, hint);  /* Propagate register hint. */
+r = ra_allocref(as, ref, allow);
+  }
+  ra_noweak(as, r);
+  return r;
+}
+
+/* Allocate two source registers for three-operand instructions. */
+static Reg ra_alloc2(ASMState *as, IRIns *ir, RegSet allow)
+{
+  IRIns *irl = IR(ir->op1), *irr = IR(ir->op2);
+  Reg left = irl->r, right = irr->r;
+  if (ra_hasreg(left)) {
+ra_noweak(as, left);
+if (ra_noreg(right))
+  right = ra_allocref(as, ir->op2, rset_exclude(allow, left));
+else
+  ra_noweak(as, right);
+  } else if (ra_hasreg(right)) {
+ra_noweak(as, right);
+left = ra_allocref(as, ir->op1, rset_exclude(allow, right));
+  } else if (ra_hashint(right)) {
+right = ra_allocref(as, ir->op2, allow);
+left = ra_alloc1(as, ir->op1, rset_exclude(allow, right));
+  } else {
+left = ra_allocref(as, ir->op1, allow);
+right = ra_alloc1(as, ir->op2, rset_exclude(allow, left));
+  }
+  return left | (right << 8);
+}
+
+/* -- Guard handling -- */
+
+/* Setup exit stubs after the end of each trace. */
+static void asm_exitstub_setup(ASMState *as, ExitNo nexits)
+{
+  ExitNo i;
+  MCode *mxp = as->mctop;
+  if (mxp - (nexits + 3 + MCLIM_REDZONE) < as->mclim)
+asm_mclimit(as);
+  /* 1: mflr r0; bl ->vm_exit_handler; li r0, traceno; bl <1; bl <1; ... */
+  for (i = nexits-1; (int32_t)i >= 0; i--)
+*--mxp = PPCI_BL|(((-3-i)&0x00ffu)<<2);
+  *--mxp = PPCI_LI|PPCF_T(RID_TMP)|as->T->traceno;  /* Read by exit handler. */
+  mxp--;
+  *mxp = PPCI_BL|MCode *)(void *)lj_vm_exit_handler-mxp)&0x00ffu)<<2);
+  *--mxp = PPCI_MFLR|PPCF_T(RID_TMP);
+  as->mctop = mxp;
+}
+
+static MCode *asm_exitstub_addr(ASMState *as, ExitNo exitno)
+{
+  /* Keep this in-sync with exitstub_trace_addr(). */
+  return as->mctop + exitno + 3;
+}
+
+/* Emit conditional branch to exit for guard. */
+static void asm_guardcc(ASMState *as, PPCCC cc)
+{
+  MCode *target = asm_exitstub_addr(as, as->snapno);
+  MCode *p = as->mcp;
+  if (LJ_UNLIKELY(p == as->invmcp)) {
+as->loopinv = 1;
+*p = PPCI_B | (((target-p) & 0x00ffu) << 2);
+emit_condbranch(as, PPCI_BC, cc^4, p);
+return;
+  }
+  emit_condbranch(as, PPCI_BC, cc, target);
+}
+
+/* -- Operand fusion -- */
+
+/* Limit linear search to this distance. Avoids O(n^2) behavior. */
+#define CONFLICT_SEARCH_LIM31
+
+/* Check if there's no conflicting instruction between curins and ref. */
+static int noconflict(ASMState *as, IRRef ref, IROp conflict)
+{
+  IRIns *ir = as->ir;
+  IRRef i = as->curins;
+  if (i > ref + CONFLICT_SEARCH_LIM)
+return 0;  /* Give up, ref is too far away. */
+  while (--i > ref)
+if (ir[i].o == conflict)
+  return 0;  /* Conflict found. */
+  return 1;  /* Ok, no conflict. */
+}
+
+/* Fuse the array base of colocated arrays. */
+static int32_t asm_fuseabase(ASMState *as, IRRef ref)
+{
+  IRIns *ir = IR(ref);
+  if (ir->o == IR_TNEW && ir->op1 <= LJ_MAX_COLOSIZE &&
+  !neverfuse(as) && noconflict(as, ref, IR_NEWREF))
+return (int32_t)sizeof(GCtab);
+  return 0;
+}
+
+/* Indicates load/store indexed is ok. */
+#define AHUREF_LSX ((int32_t)0x8000)
+
+/* Fuse array/hash/upvalue reference into register+offset operand. */
+static Reg asm_fuseahuref(ASMState *as, IRRef ref, int32_t *ofsp, RegSet allow)
+{
+  IRIns *ir = IR(ref);
+  if (ra_noreg(ir->r)) {
+if (ir->o == IR_AREF) {
+  if (mayfuse(as, ref)) {
+   if (irref_isk(ir->op2)) {
+ IRRef tab = IR(ir->op1)->op1;
+ int32_t ofs = asm_fuseabase(as, tab);
+ IRRef refa = ofs ? tab : ir->op1;
+ ofs += 8*IR(ir->op2)->i;
+ if (checki16(ofs)) {
+   *ofsp = ofs;
+   return ra_alloc1(as, refa, allow);
+ }
+   }
+   if (*ofsp == AHUREF_LSX) {
+ Reg base = ra_alloc1(as, ir->op1, allow);
+ Reg idx = ra_alloc1(as, ir->op2, rset_exclude(RSET_GPR, base));
+ return base | (idx << 8);
+   }
+  }
+} else if (ir->o == IR_HREFK) {
+  if (mayfuse(as, ref)) {
+   int32_t ofs = (int32_t)(IR(ir->op2)->op2 * sizeof(Node));
+   if (checki16(of

[28/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_asm_arm.h
--
diff --git a/lib/luajit/src/lj_asm_arm.h b/lib/luajit/src/lj_asm_arm.h
new file mode 100644
index 000..9e4cf43
--- /dev/null
+++ b/lib/luajit/src/lj_asm_arm.h
@@ -0,0 +1,2361 @@
+/*
+** ARM IR assembler (SSA IR -> machine code).
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+/* -- Register allocator extensions --- */
+
+/* Allocate a register with a hint. */
+static Reg ra_hintalloc(ASMState *as, IRRef ref, Reg hint, RegSet allow)
+{
+  Reg r = IR(ref)->r;
+  if (ra_noreg(r)) {
+if (!ra_hashint(r) && !iscrossref(as, ref))
+  ra_sethint(IR(ref)->r, hint);  /* Propagate register hint. */
+r = ra_allocref(as, ref, allow);
+  }
+  ra_noweak(as, r);
+  return r;
+}
+
+/* Allocate a scratch register pair. */
+static Reg ra_scratchpair(ASMState *as, RegSet allow)
+{
+  RegSet pick1 = as->freeset & allow;
+  RegSet pick2 = pick1 & (pick1 >> 1) & RSET_GPREVEN;
+  Reg r;
+  if (pick2) {
+r = rset_picktop(pick2);
+  } else {
+RegSet pick = pick1 & (allow >> 1) & RSET_GPREVEN;
+if (pick) {
+  r = rset_picktop(pick);
+  ra_restore(as, regcost_ref(as->cost[r+1]));
+} else {
+  pick = pick1 & (allow << 1) & RSET_GPRODD;
+  if (pick) {
+   r = ra_restore(as, regcost_ref(as->cost[rset_picktop(pick)-1]));
+  } else {
+   r = ra_evict(as, allow & (allow >> 1) & RSET_GPREVEN);
+   ra_restore(as, regcost_ref(as->cost[r+1]));
+  }
+}
+  }
+  lua_assert(rset_test(RSET_GPREVEN, r));
+  ra_modified(as, r);
+  ra_modified(as, r+1);
+  RA_DBGX((as, "scratchpair$r $r", r, r+1));
+  return r;
+}
+
+#if !LJ_SOFTFP
+/* Allocate two source registers for three-operand instructions. */
+static Reg ra_alloc2(ASMState *as, IRIns *ir, RegSet allow)
+{
+  IRIns *irl = IR(ir->op1), *irr = IR(ir->op2);
+  Reg left = irl->r, right = irr->r;
+  if (ra_hasreg(left)) {
+ra_noweak(as, left);
+if (ra_noreg(right))
+  right = ra_allocref(as, ir->op2, rset_exclude(allow, left));
+else
+  ra_noweak(as, right);
+  } else if (ra_hasreg(right)) {
+ra_noweak(as, right);
+left = ra_allocref(as, ir->op1, rset_exclude(allow, right));
+  } else if (ra_hashint(right)) {
+right = ra_allocref(as, ir->op2, allow);
+left = ra_alloc1(as, ir->op1, rset_exclude(allow, right));
+  } else {
+left = ra_allocref(as, ir->op1, allow);
+right = ra_alloc1(as, ir->op2, rset_exclude(allow, left));
+  }
+  return left | (right << 8);
+}
+#endif
+
+/* -- Guard handling -- */
+
+/* Generate an exit stub group at the bottom of the reserved MCode memory. */
+static MCode *asm_exitstub_gen(ASMState *as, ExitNo group)
+{
+  MCode *mxp = as->mcbot;
+  int i;
+  if (mxp + 4*4+4*EXITSTUBS_PER_GROUP >= as->mctop)
+asm_mclimit(as);
+  /* str lr, [sp]; bl ->vm_exit_handler; .long DISPATCH_address, group. */
+  *mxp++ = ARMI_STR|ARMI_LS_P|ARMI_LS_U|ARMF_D(RID_LR)|ARMF_N(RID_SP);
+  *mxp = ARMI_BL|MCode *)(void *)lj_vm_exit_handler-mxp)-2)&0x00ffu);
+  mxp++;
+  *mxp++ = (MCode)i32ptr(J2GG(as->J)->dispatch);  /* DISPATCH address */
+  *mxp++ = group*EXITSTUBS_PER_GROUP;
+  for (i = 0; i < EXITSTUBS_PER_GROUP; i++)
+*mxp++ = ARMI_B|((-6-i)&0x00ffu);
+  lj_mcode_sync(as->mcbot, mxp);
+  lj_mcode_commitbot(as->J, mxp);
+  as->mcbot = mxp;
+  as->mclim = as->mcbot + MCLIM_REDZONE;
+  return mxp - EXITSTUBS_PER_GROUP;
+}
+
+/* Setup all needed exit stubs. */
+static void asm_exitstub_setup(ASMState *as, ExitNo nexits)
+{
+  ExitNo i;
+  if (nexits >= EXITSTUBS_PER_GROUP*LJ_MAX_EXITSTUBGR)
+lj_trace_err(as->J, LJ_TRERR_SNAPOV);
+  for (i = 0; i < (nexits+EXITSTUBS_PER_GROUP-1)/EXITSTUBS_PER_GROUP; i++)
+if (as->J->exitstubgroup[i] == NULL)
+  as->J->exitstubgroup[i] = asm_exitstub_gen(as, i);
+}
+
+/* Emit conditional branch to exit for guard. */
+static void asm_guardcc(ASMState *as, ARMCC cc)
+{
+  MCode *target = exitstub_addr(as->J, as->snapno);
+  MCode *p = as->mcp;
+  if (LJ_UNLIKELY(p == as->invmcp)) {
+as->loopinv = 1;
+*p = ARMI_BL | ((target-p-2) & 0x00ffu);
+emit_branch(as, ARMF_CC(ARMI_B, cc^1), p+1);
+return;
+  }
+  emit_branch(as, ARMF_CC(ARMI_BL, cc), target);
+}
+
+/* -- Operand fusion -- */
+
+/* Limit linear search to this distance. Avoids O(n^2) behavior. */
+#define CONFLICT_SEARCH_LIM31
+
+/* Check if there's no conflicting instruction between curins and ref. */
+static int noconflict(ASMState *as, IRRef ref, IROp conflict)
+{
+  IRIns *ir = as->ir;
+  IRRef i = as->curins;
+  if (i > ref + CONFLICT_SEARCH_LIM)
+return 0;  /* Give up, ref is too far away. */
+  while (--i > ref)
+if (ir[i].o == conflict)
+  return 0;  /* Conflict found. */
+  return 1;  /* Ok, n

[25/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_asm_x86.h
--
diff --git a/lib/luajit/src/lj_asm_x86.h b/lib/luajit/src/lj_asm_x86.h
new file mode 100644
index 000..0b6b2d4
--- /dev/null
+++ b/lib/luajit/src/lj_asm_x86.h
@@ -0,0 +1,2806 @@
+/*
+** x86/x64 IR assembler (SSA IR -> machine code).
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+/* -- Guard handling -- */
+
+/* Generate an exit stub group at the bottom of the reserved MCode memory. */
+static MCode *asm_exitstub_gen(ASMState *as, ExitNo group)
+{
+  ExitNo i, groupofs = (group*EXITSTUBS_PER_GROUP) & 0xff;
+  MCode *mxp = as->mcbot;
+  MCode *mxpstart = mxp;
+  if (mxp + (2+2)*EXITSTUBS_PER_GROUP+8+5 >= as->mctop)
+asm_mclimit(as);
+  /* Push low byte of exitno for each exit stub. */
+  *mxp++ = XI_PUSHi8; *mxp++ = (MCode)groupofs;
+  for (i = 1; i < EXITSTUBS_PER_GROUP; i++) {
+*mxp++ = XI_JMPs; *mxp++ = (MCode)((2+2)*(EXITSTUBS_PER_GROUP - i) - 2);
+*mxp++ = XI_PUSHi8; *mxp++ = (MCode)(groupofs + i);
+  }
+  /* Push the high byte of the exitno for each exit stub group. */
+  *mxp++ = XI_PUSHi8; *mxp++ = (MCode)((group*EXITSTUBS_PER_GROUP)>>8);
+  /* Store DISPATCH at original stack slot 0. Account for the two push ops. */
+  *mxp++ = XI_MOVmi;
+  *mxp++ = MODRM(XM_OFS8, 0, RID_ESP);
+  *mxp++ = MODRM(XM_SCALE1, RID_ESP, RID_ESP);
+  *mxp++ = 2*sizeof(void *);
+  *(int32_t *)mxp = ptr2addr(J2GG(as->J)->dispatch); mxp += 4;
+  /* Jump to exit handler which fills in the ExitState. */
+  *mxp++ = XI_JMP; mxp += 4;
+  *((int32_t *)(mxp-4)) = jmprel(mxp, (MCode *)(void *)lj_vm_exit_handler);
+  /* Commit the code for this group (even if assembly fails later on). */
+  lj_mcode_commitbot(as->J, mxp);
+  as->mcbot = mxp;
+  as->mclim = as->mcbot + MCLIM_REDZONE;
+  return mxpstart;
+}
+
+/* Setup all needed exit stubs. */
+static void asm_exitstub_setup(ASMState *as, ExitNo nexits)
+{
+  ExitNo i;
+  if (nexits >= EXITSTUBS_PER_GROUP*LJ_MAX_EXITSTUBGR)
+lj_trace_err(as->J, LJ_TRERR_SNAPOV);
+  for (i = 0; i < (nexits+EXITSTUBS_PER_GROUP-1)/EXITSTUBS_PER_GROUP; i++)
+if (as->J->exitstubgroup[i] == NULL)
+  as->J->exitstubgroup[i] = asm_exitstub_gen(as, i);
+}
+
+/* Emit conditional branch to exit for guard.
+** It's important to emit this *after* all registers have been allocated,
+** because rematerializations may invalidate the flags.
+*/
+static void asm_guardcc(ASMState *as, int cc)
+{
+  MCode *target = exitstub_addr(as->J, as->snapno);
+  MCode *p = as->mcp;
+  if (LJ_UNLIKELY(p == as->invmcp)) {
+as->loopinv = 1;
+*(int32_t *)(p+1) = jmprel(p+5, target);
+target = p;
+cc ^= 1;
+if (as->realign) {
+  emit_sjcc(as, cc, target);
+  return;
+}
+  }
+  emit_jcc(as, cc, target);
+}
+
+/* -- Memory operand fusion --- */
+
+/* Limit linear search to this distance. Avoids O(n^2) behavior. */
+#define CONFLICT_SEARCH_LIM31
+
+/* Check if a reference is a signed 32 bit constant. */
+static int asm_isk32(ASMState *as, IRRef ref, int32_t *k)
+{
+  if (irref_isk(ref)) {
+IRIns *ir = IR(ref);
+if (ir->o != IR_KINT64) {
+  *k = ir->i;
+  return 1;
+} else if (checki32((int64_t)ir_kint64(ir)->u64)) {
+  *k = (int32_t)ir_kint64(ir)->u64;
+  return 1;
+}
+  }
+  return 0;
+}
+
+/* Check if there's no conflicting instruction between curins and ref.
+** Also avoid fusing loads if there are multiple references.
+*/
+static int noconflict(ASMState *as, IRRef ref, IROp conflict, int noload)
+{
+  IRIns *ir = as->ir;
+  IRRef i = as->curins;
+  if (i > ref + CONFLICT_SEARCH_LIM)
+return 0;  /* Give up, ref is too far away. */
+  while (--i > ref) {
+if (ir[i].o == conflict)
+  return 0;  /* Conflict found. */
+else if (!noload && (ir[i].op1 == ref || ir[i].op2 == ref))
+  return 0;
+  }
+  return 1;  /* Ok, no conflict. */
+}
+
+/* Fuse array base into memory operand. */
+static IRRef asm_fuseabase(ASMState *as, IRRef ref)
+{
+  IRIns *irb = IR(ref);
+  as->mrm.ofs = 0;
+  if (irb->o == IR_FLOAD) {
+IRIns *ira = IR(irb->op1);
+lua_assert(irb->op2 == IRFL_TAB_ARRAY);
+/* We can avoid the FLOAD of t->array for colocated arrays. */
+if (ira->o == IR_TNEW && ira->op1 <= LJ_MAX_COLOSIZE &&
+   !neverfuse(as) && noconflict(as, irb->op1, IR_NEWREF, 1)) {
+  as->mrm.ofs = (int32_t)sizeof(GCtab);  /* Ofs to colocated array. */
+  return irb->op1;  /* Table obj. */
+}
+  } else if (irb->o == IR_ADD && irref_isk(irb->op2)) {
+/* Fuse base offset (vararg load). */
+as->mrm.ofs = IR(irb->op2)->i;
+return irb->op1;
+  }
+  return ref;  /* Otherwise use the given array base. */
+}
+
+/* Fuse array reference into memory operand. */
+static void asm_fusearef(ASMState *as, IRIns *ir, RegSet allow)
+{
+  

[05/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/vm_ppc.dasc
--
diff --git a/lib/luajit/src/vm_ppc.dasc b/lib/luajit/src/vm_ppc.dasc
new file mode 100644
index 000..ad8a023
--- /dev/null
+++ b/lib/luajit/src/vm_ppc.dasc
@@ -0,0 +1,5160 @@
+|// Low-level VM code for PowerPC CPUs.
+|// Bytecode interpreter, fast functions and helper functions.
+|// Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+|
+|.arch ppc
+|.section code_op, code_sub
+|
+|.actionlist build_actionlist
+|.globals GLOB_
+|.globalnames globnames
+|.externnames extnames
+|
+|// Note: The ragged indentation of the instructions is intentional.
+|//   The starting columns indicate data dependencies.
+|
+|//---
+|
+|// DynASM defines used by the PPC port:
+|//
+|// P64 64 bit pointers (only for GPR64 testing).
+|// Note: a full PPC64 _LP64 port is not planned.
+|// GPR64   64 bit registers (but possibly 32 bit pointers, e.g. PS3).
+|// Affects reg saves, stack layout, carry/overflow/dot flags etc.
+|// FRAME32 Use 32 bit frame layout, even with GPR64 (Xbox 360).
+|// TOC Need table of contents (64 bit or 32 bit variant, e.g. PS3).
+|// Function pointers are really a struct: code, TOC, env (optional).
+|// TOCENV  Function pointers have an environment pointer, too (not on PS3).
+|// PPE Power Processor Element of Cell (PS3) or Xenon (Xbox 360).
+|// Must avoid (slow) micro-coded instructions.
+|
+|.if P64
+|.define TOC, 1
+|.define TOCENV, 1
+|.macro lpx, a, b, c; ldx a, b, c; .endmacro
+|.macro lp, a, b; ld a, b; .endmacro
+|.macro stp, a, b; std a, b; .endmacro
+|.define decode_OPP, decode_OP8
+|.if FFI
+|// Missing: Calling conventions, 64 bit regs, TOC.
+|.error lib_ffi not yet implemented for PPC64
+|.endif
+|.else
+|.macro lpx, a, b, c; lwzx a, b, c; .endmacro
+|.macro lp, a, b; lwz a, b; .endmacro
+|.macro stp, a, b; stw a, b; .endmacro
+|.define decode_OPP, decode_OP4
+|.endif
+|
+|// Convenience macros for TOC handling.
+|.if TOC
+|// Linker needs a TOC patch area for every external call relocation.
+|.macro blex, target; bl extern target@plt; nop; .endmacro
+|.macro .toc, a, b; a, b; .endmacro
+|.if P64
+|.define TOC_OFS,   8
+|.define ENV_OFS,  16
+|.else
+|.define TOC_OFS,  4
+|.define ENV_OFS,  8
+|.endif
+|.else  // No TOC.
+|.macro blex, target; bl extern target@plt; .endmacro
+|.macro .toc, a, b; .endmacro
+|.endif
+|.macro .tocenv, a, b; .if TOCENV; a, b; .endif; .endmacro
+|
+|.macro .gpr64, a, b; .if GPR64; a, b; .endif; .endmacro
+|
+|.macro andix., y, a, i
+|.if PPE
+|  rlwinm y, a, 0, 31-lj_fls(i), 31-lj_ffs(i)
+|  cmpwi y, 0
+|.else
+|  andi. y, a, i
+|.endif
+|.endmacro
+|
+|.macro clrso, reg
+|.if PPE
+|  li reg, 0
+|  mtxer reg
+|.else
+|  mcrxr cr0
+|.endif
+|.endmacro
+|
+|.macro checkov, reg, noov
+|.if PPE
+|  mfxer reg
+|  add reg, reg, reg
+|  cmpwi reg, 0
+|   li reg, 0
+|   mtxer reg
+|  bgey noov
+|.else
+|  mcrxr cr0
+|  bley noov
+|.endif
+|.endmacro
+|
+|//---
+|
+|// Fixed register assignments for the interpreter.
+|// Don't use: r1 = sp, r2 and r13 = reserved (TOC, TLS or SDATA)
+|
+|// The following must be C callee-save (but BASE is often refetched).
+|.define BASE, r14 // Base of current Lua stack frame.
+|.define KBASE,r15 // Constants of current Lua function.
+|.define PC,   r16 // Next PC.
+|.define DISPATCH, r17 // Opcode dispatch table.
+|.define LREG, r18 // Register holding lua_State (also in SAVE_L).
+|.define MULTRES,  r19 // Size of multi-result: (nresults+1)*8.
+|.define JGL,  r31 // On-trace: global_State + 32768.
+|
+|// Constants for type-comparisons, stores and conversions. C callee-save.
+|.define TISNUM,   r22
+|.define TISNIL,   r23
+|.define ZERO, r24
+|.define TOBIT,f30 // 2^52 + 2^51.
+|.define TONUM,f31 // 2^52 + 2^51 + 2^31.
+|
+|// The following temporaries are not saved across C calls, except for RA.
+|.define RA,   r20 // Callee-save.
+|.define RB,   r10
+|.define RC,   r11
+|.define RD,   r12
+|.define INS,  r7  // Overlaps CARG5.
+|
+|.define TMP0, r0
+|.define TMP1, r8
+|.define TMP2, r9
+|.define TMP3, r6  // Overlaps CARG4.
+|
+|// Saved temporaries.
+|.define SAVE0,r21
+|
+|// Calling conventions.
+|.define CARG1,r3
+|.define CARG2,r4
+|.define CARG3,r5
+|.define CARG4,r6  // Overlaps TMP3.
+|.define CARG5,r7  // Overlaps INS.
+|
+|.define FARG1,f1
+|.define FARG2,f2
+|
+|.define CRET1,   

[11/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_record.c
--
diff --git a/lib/luajit/src/lj_record.c b/lib/luajit/src/lj_record.c
new file mode 100644
index 000..843108c
--- /dev/null
+++ b/lib/luajit/src/lj_record.c
@@ -0,0 +1,2252 @@
+/*
+** Trace recorder (bytecode -> SSA IR).
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#define lj_record_c
+#define LUA_CORE
+
+#include "lj_obj.h"
+
+#if LJ_HASJIT
+
+#include "lj_err.h"
+#include "lj_str.h"
+#include "lj_tab.h"
+#include "lj_meta.h"
+#include "lj_frame.h"
+#if LJ_HASFFI
+#include "lj_ctype.h"
+#endif
+#include "lj_bc.h"
+#include "lj_ff.h"
+#include "lj_ir.h"
+#include "lj_jit.h"
+#include "lj_ircall.h"
+#include "lj_iropt.h"
+#include "lj_trace.h"
+#include "lj_record.h"
+#include "lj_ffrecord.h"
+#include "lj_snap.h"
+#include "lj_dispatch.h"
+#include "lj_vm.h"
+
+/* Some local macros to save typing. Undef'd at the end. */
+#define IR(ref)(&J->cur.ir[(ref)])
+
+/* Pass IR on to next optimization in chain (FOLD). */
+#define emitir(ot, a, b)   (lj_ir_set(J, (ot), (a), (b)), lj_opt_fold(J))
+
+/* Emit raw IR without passing through optimizations. */
+#define emitir_raw(ot, a, b)   (lj_ir_set(J, (ot), (a), (b)), lj_ir_emit(J))
+
+/* -- Sanity checks --- */
+
+#ifdef LUA_USE_ASSERT
+/* Sanity check the whole IR -- slw. */
+static void rec_check_ir(jit_State *J)
+{
+  IRRef i, nins = J->cur.nins, nk = J->cur.nk;
+  lua_assert(nk <= REF_BIAS && nins >= REF_BIAS && nins < 65536);
+  for (i = nins-1; i >= nk; i--) {
+IRIns *ir = IR(i);
+uint32_t mode = lj_ir_mode[ir->o];
+IRRef op1 = ir->op1;
+IRRef op2 = ir->op2;
+switch (irm_op1(mode)) {
+case IRMnone: lua_assert(op1 == 0); break;
+case IRMref: lua_assert(op1 >= nk);
+  lua_assert(i >= REF_BIAS ? op1 < i : op1 > i); break;
+case IRMlit: break;
+case IRMcst: lua_assert(i < REF_BIAS); continue;
+}
+switch (irm_op2(mode)) {
+case IRMnone: lua_assert(op2 == 0); break;
+case IRMref: lua_assert(op2 >= nk);
+  lua_assert(i >= REF_BIAS ? op2 < i : op2 > i); break;
+case IRMlit: break;
+case IRMcst: lua_assert(0); break;
+}
+if (ir->prev) {
+  lua_assert(ir->prev >= nk);
+  lua_assert(i >= REF_BIAS ? ir->prev < i : ir->prev > i);
+  lua_assert(ir->o == IR_NOP || IR(ir->prev)->o == ir->o);
+}
+  }
+}
+
+/* Compare stack slots and frames of the recorder and the VM. */
+static void rec_check_slots(jit_State *J)
+{
+  BCReg s, nslots = J->baseslot + J->maxslot;
+  int32_t depth = 0;
+  cTValue *base = J->L->base - J->baseslot;
+  lua_assert(J->baseslot >= 1 && J->baseslot < LJ_MAX_JSLOTS);
+  lua_assert(J->baseslot == 1 || (J->slot[J->baseslot-1] & TREF_FRAME));
+  lua_assert(nslots < LJ_MAX_JSLOTS);
+  for (s = 0; s < nslots; s++) {
+TRef tr = J->slot[s];
+if (tr) {
+  cTValue *tv = &base[s];
+  IRRef ref = tref_ref(tr);
+  IRIns *ir;
+  lua_assert(ref >= J->cur.nk && ref < J->cur.nins);
+  ir = IR(ref);
+  lua_assert(irt_t(ir->t) == tref_t(tr));
+  if (s == 0) {
+   lua_assert(tref_isfunc(tr));
+  } else if ((tr & TREF_FRAME)) {
+   GCfunc *fn = gco2func(frame_gc(tv));
+   BCReg delta = (BCReg)(tv - frame_prev(tv));
+   lua_assert(tref_isfunc(tr));
+   if (tref_isk(tr)) lua_assert(fn == ir_kfunc(ir));
+   lua_assert(s > delta ? (J->slot[s-delta] & TREF_FRAME) : (s == delta));
+   depth++;
+  } else if ((tr & TREF_CONT)) {
+   lua_assert(ir_kptr(ir) == gcrefp(tv->gcr, void));
+   lua_assert((J->slot[s+1] & TREF_FRAME));
+   depth++;
+  } else {
+   if (tvisnumber(tv))
+ lua_assert(tref_isnumber(tr));  /* Could be IRT_INT etc., too. */
+   else
+ lua_assert(itype2irt(tv) == tref_type(tr));
+   if (tref_isk(tr)) {  /* Compare constants. */
+ TValue tvk;
+ lj_ir_kvalue(J->L, &tvk, ir);
+ if (!(tvisnum(&tvk) && tvisnan(&tvk)))
+   lua_assert(lj_obj_equal(tv, &tvk));
+ else
+   lua_assert(tvisnum(tv) && tvisnan(tv));
+   }
+  }
+}
+  }
+  lua_assert(J->framedepth == depth);
+}
+#endif
+
+/* -- Type handling and specialization  */
+
+/* Note: these functions return tagged references (TRef). */
+
+/* Specialize a slot to a specific type. Note: slot can be negative! */
+static TRef sloadt(jit_State *J, int32_t slot, IRType t, int mode)
+{
+  /* Caller may set IRT_GUARD in t. */
+  TRef ref = emitir_raw(IRT(IR_SLOAD, t), (int32_t)J->baseslot+slot, mode);
+  J->base[slot] = ref;
+  return ref;
+}
+
+/* Specialize a slot to the runtime type. Note: slot can be negative! */
+static TRef sload(jit_State *J, int32_t slot)
+{
+  IRType t = itype2irt(&J->L->base[slot]);
+  TRef ref = emitir_raw(IRTG(IR_SLOAD, t), (

[08/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_traceerr.h
--
diff --git a/lib/luajit/src/lj_traceerr.h b/lib/luajit/src/lj_traceerr.h
new file mode 100644
index 000..9bef117
--- /dev/null
+++ b/lib/luajit/src/lj_traceerr.h
@@ -0,0 +1,61 @@
+/*
+** Trace compiler error messages.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+/* This file may be included multiple times with different TREDEF macros. */
+
+/* Recording. */
+TREDEF(RECERR, "error thrown or hook called during recording")
+TREDEF(TRACEOV,"trace too long")
+TREDEF(STACKOV,"trace too deep")
+TREDEF(SNAPOV, "too many snapshots")
+TREDEF(BLACKL, "blacklisted")
+TREDEF(NYIBC,  "NYI: bytecode %d")
+
+/* Recording loop ops. */
+TREDEF(LLEAVE, "leaving loop in root trace")
+TREDEF(LINNER, "inner loop in root trace")
+TREDEF(LUNROLL,"loop unroll limit reached")
+
+/* Recording calls/returns. */
+TREDEF(BADTYPE,"bad argument type")
+TREDEF(CJITOFF,"JIT compilation disabled for function")
+TREDEF(CUNROLL,"call unroll limit reached")
+TREDEF(DOWNREC,"down-recursion, restarting")
+TREDEF(NYICF,  "NYI: C function %p")
+TREDEF(NYIFF,  "NYI: FastFunc %s")
+TREDEF(NYIFFU, "NYI: unsupported variant of FastFunc %s")
+TREDEF(NYIRETL,"NYI: return to lower frame")
+
+/* Recording indexed load/store. */
+TREDEF(STORENN,"store with nil or NaN key")
+TREDEF(NOMM,   "missing metamethod")
+TREDEF(IDXLOOP,"looping index lookup")
+TREDEF(NYITMIX,"NYI: mixed sparse/dense table")
+
+/* Recording C data operations. */
+TREDEF(NOCACHE,"symbol not in cache")
+TREDEF(NYICONV,"NYI: unsupported C type conversion")
+TREDEF(NYICALL,"NYI: unsupported C function type")
+
+/* Optimizations. */
+TREDEF(GFAIL,  "guard would always fail")
+TREDEF(PHIOV,  "too many PHIs")
+TREDEF(TYPEINS,"persistent type instability")
+
+/* Assembler. */
+TREDEF(MCODEAL,"failed to allocate mcode memory")
+TREDEF(MCODEOV,"machine code too long")
+TREDEF(MCODELM,"hit mcode limit (retrying)")
+TREDEF(SPILLOV,"too many spill slots")
+TREDEF(BADRA,  "inconsistent register allocation")
+TREDEF(NYIIR,  "NYI: cannot assemble IR instruction %d")
+TREDEF(NYIPHI, "NYI: PHI shuffling too complex")
+TREDEF(NYICOAL,"NYI: register coalescing too complex")
+
+#undef TREDEF
+
+/* Detecting unused error messages:
+   awk -F, '/^TREDEF/ { gsub(/TREDEF./, ""); printf "grep -q LJ_TRERR_%s 
*.[ch] || echo %s\n", $1, $1}' lj_traceerr.h | sh
+*/

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_udata.c
--
diff --git a/lib/luajit/src/lj_udata.c b/lib/luajit/src/lj_udata.c
new file mode 100644
index 000..d401a3d
--- /dev/null
+++ b/lib/luajit/src/lj_udata.c
@@ -0,0 +1,34 @@
+/*
+** Userdata handling.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#define lj_udata_c
+#define LUA_CORE
+
+#include "lj_obj.h"
+#include "lj_gc.h"
+#include "lj_udata.h"
+
+GCudata *lj_udata_new(lua_State *L, MSize sz, GCtab *env)
+{
+  GCudata *ud = lj_mem_newt(L, sizeof(GCudata) + sz, GCudata);
+  global_State *g = G(L);
+  newwhite(g, ud);  /* Not finalized. */
+  ud->gct = ~LJ_TUDATA;
+  ud->udtype = UDTYPE_USERDATA;
+  ud->len = sz;
+  /* NOBARRIER: The GCudata is new (marked white). */
+  setgcrefnull(ud->metatable);
+  setgcref(ud->env, obj2gco(env));
+  /* Chain to userdata list (after main thread). */
+  setgcrefr(ud->nextgc, mainthread(g)->nextgc);
+  setgcref(mainthread(g)->nextgc, obj2gco(ud));
+  return ud;
+}
+
+void LJ_FASTCALL lj_udata_free(global_State *g, GCudata *ud)
+{
+  lj_mem_free(g, ud, sizeudata(ud));
+}
+

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_udata.h
--
diff --git a/lib/luajit/src/lj_udata.h b/lib/luajit/src/lj_udata.h
new file mode 100644
index 000..676e970
--- /dev/null
+++ b/lib/luajit/src/lj_udata.h
@@ -0,0 +1,14 @@
+/*
+** Userdata handling.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#ifndef _LJ_UDATA_H
+#define _LJ_UDATA_H
+
+#include "lj_obj.h"
+
+LJ_FUNC GCudata *lj_udata_new(lua_State *L, MSize sz, GCtab *env);
+LJ_FUNC void LJ_FASTCALL lj_udata_free(global_State *g, GCudata *ud);
+
+#endif

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_vm.h
--
diff --git a/lib/luajit/src/lj_vm.h b/lib/luajit/src/lj_vm.h
new file mode 100644
index 000..036cabc
--- /dev/null
+++ b/lib/luajit/src/lj_vm.h
@@ -0,0 +1,116 @@
+/*
+** Assembler VM interface definitions.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#if

[40/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/doc/running.html
--
diff --git a/lib/luajit/doc/running.html b/lib/luajit/doc/running.html
new file mode 100644
index 000..c6e1c29
--- /dev/null
+++ b/lib/luajit/doc/running.html
@@ -0,0 +1,306 @@
+http://www.w3.org/TR/html4/strict.dtd";>
+
+
+Running LuaJIT
+
+
+
+
+
+
+
+table.opt {
+  line-height: 1.2;
+}
+tr.opthead td {
+  font-weight: bold;
+}
+td.flag_name {
+  width: 4em;
+}
+td.flag_level {
+  width: 2em;
+  text-align: center;
+}
+td.param_name {
+  width: 6em;
+}
+td.param_default {
+  width: 4em;
+  text-align: right;
+}
+
+
+
+
+http://luajit.org";>LuaJIT
+
+
+Running LuaJIT
+
+
+
+LuaJIT
+
+http://luajit.org/download.html";>Download »
+
+Installation
+
+Running
+
+
+Extensions
+
+FFI Library
+
+FFI Tutorial
+
+ffi.* API
+
+FFI Semantics
+
+
+jit.* Library
+
+Lua/C API
+
+
+Status
+
+Changes
+
+
+FAQ
+
+http://luajit.org/performance.html";>Performance »
+
+http://wiki.luajit.org/";>Wiki »
+
+http://luajit.org/list.html";>Mailing List »
+
+
+
+
+LuaJIT has only a single stand-alone executable, called luajit on
+POSIX systems or luajit.exe on Windows. It can be used to run simple
+Lua statements or whole Lua applications from the command line. It has an
+interactive mode, too.
+
+
+Command Line Options
+
+The luajit stand-alone executable is just a slightly modified
+version of the regular lua stand-alone executable.
+It supports the same basic options, too. luajit -h
+prints a short list of the available options. Please have a look at the
+http://www.lua.org/manual/5.1/manual.html#6";>» Lua manual
+for details.
+
+
+LuaJIT has some additional options:
+
+
+-b[options] input output
+
+This option saves or lists bytecode. The following additional options
+are accepted:
+
+
+-l — Only list bytecode.
+-s — Strip debug info (this is the default).
+-g — Keep debug info.
+-n name — Set module name (default: auto-detect from input 
name)
+-t type — Set output file type (default: auto-detect from 
output name).
+-a arch — Override architecture for object files (default: 
native).
+-o os — Override OS for object files (default: native).
+-e chunk — Use chunk string as input.
+- (a single minus sign) — Use stdin as input and/or stdout 
as output.
+
+
+The output file type is auto-detected from the extension of the output
+file name:
+
+
+c — C source file, exported bytecode data.
+h — C header file, static bytecode data.
+obj or o — Object file, exported bytecode data
+(OS- and architecture-specific).
+raw or any other extension — Raw bytecode file (portable).
+
+
+Notes:
+
+
+See also string.dump()
+for information on bytecode portability and compatibility.
+A file in raw bytecode format is auto-detected and can be loaded like
+any Lua source file. E.g. directly from the command line or with
+loadfile(), dofile() etc.
+To statically embed the bytecode of a module in your application,
+generate an object file and just link it with your application.
+On most ELF-based systems (e.g. Linux) you need to explicitly export the
+global symbols when linking your application, e.g. with: -Wl,-E
+require() tries to load embedded bytecode data from exported
+symbols (in *.exe or lua51.dll on Windows) and from
+shared libraries in package.cpath.
+
+
+Typical usage examples:
+
+
+luajit -b test.lua test.out # Save bytecode to test.out
+luajit -bg test.lua test.out# Keep debug info
+luajit -be "print('hello world')" test.out  # Save cmdline script
+
+luajit -bl test.lua # List to stdout
+luajit -bl test.lua test.txt# List to test.txt
+luajit -ble "print('hello world')"  # List cmdline script
+
+luajit -b test.lua test.obj # Generate object file
+# Link test.obj with your application and load it with require("test")
+
+
+-j cmd[=arg[,arg...]]
+
+This option performs a LuaJIT control command or activates one of the
+loadable extension modules. The command is first looked up in the
+jit.* library. If no matching function is found, a module
+named jit. is loaded and the start()
+function of the module is called with the specified arguments (if
+any). The space between -j and cmd is optional.
+
+
+Here are the available LuaJIT control commands:
+
+
+-jon — Turns the JIT compiler on (default).
+-joff — Turns the JIT compiler off (only use the 
interpreter).
+-jflush — Flushes the whole cache of compiled 
code.
+-jv — Shows verbose information about the progress 
of the JIT compiler.
+-jdump — Dumps the code and structures used in 
various compiler stages.
+
+
+The -jv and -jdump commands are extension modules
+written in Lua. They are mainly used for debugging the JIT compiler
+itself. For a description of their options and output format, please
+read the comment block at the start of their source.
+They can be found in the lib directory of the source
+distribution or installed u

[42/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/doc/ext_ffi.html
--
diff --git a/lib/luajit/doc/ext_ffi.html b/lib/luajit/doc/ext_ffi.html
new file mode 100644
index 000..77b8e26
--- /dev/null
+++ b/lib/luajit/doc/ext_ffi.html
@@ -0,0 +1,330 @@
+http://www.w3.org/TR/html4/strict.dtd";>
+
+
+FFI Library
+
+
+
+
+
+
+
+
+
+http://luajit.org";>LuaJIT
+
+
+FFI Library
+
+
+
+LuaJIT
+
+http://luajit.org/download.html";>Download »
+
+Installation
+
+Running
+
+
+Extensions
+
+FFI Library
+
+FFI Tutorial
+
+ffi.* API
+
+FFI Semantics
+
+
+jit.* Library
+
+Lua/C API
+
+
+Status
+
+Changes
+
+
+FAQ
+
+http://luajit.org/performance.html";>Performance »
+
+http://wiki.luajit.org/";>Wiki »
+
+http://luajit.org/list.html";>Mailing List »
+
+
+
+
+
+The FFI library allows calling external C functions and
+using C data structures from pure Lua code.
+
+
+
+
+The FFI library largely obviates the need to write tedious manual
+Lua/C bindings in C. No need to learn a separate binding language
+— it parses plain C declarations! These can be
+cut-n-pasted from C header files or reference manuals. It's up to
+the task of binding large libraries without the need for dealing with
+fragile binding generators.
+
+
+
+The FFI library is tightly integrated into LuaJIT (it's not available
+as a separate module). The code generated by the JIT-compiler for
+accesses to C data structures from Lua code is on par with the
+code a C compiler would generate. Calls to C functions can
+be inlined in JIT-compiled code, unlike calls to functions bound via
+the classic Lua/C API.
+
+
+This page gives a short introduction to the usage of the FFI library.
+Please use the FFI sub-topics in the navigation bar to learn more.
+
+
+Motivating Example: Calling External C Functions
+
+It's really easy to call an external C library function:
+
+
+①
+②
+
+
+③local ffi = require("ffi")
+ffi.cdef[[
+int printf(const char *fmt, ...);
+]]
+ffi.C.printf("Hello %s!", "world")
+
+
+So, let's pick that apart:
+
+
+① Load the FFI library.
+
+
+② Add a C declaration
+for the function. The part inside the double-brackets (in green) is
+just standard C syntax.
+
+
+③ Call the named
+C function — Yes, it's that simple!
+
+
+Actually, what goes on behind the scenes is far from simple: ③ makes use of the standard
+C library namespace ffi.C. Indexing this namespace with
+a symbol name ("printf") automatically binds it to the
+standard C library. The result is a special kind of object which,
+when called, runs the printf function. The arguments passed
+to this function are automatically converted from Lua objects to the
+corresponding C types.
+
+
+Ok, so maybe the use of printf() wasn't such a spectacular
+example. You could have done that with io.write() and
+string.format(), too. But you get the idea ...
+
+
+So here's something to pop up a message box on Windows:
+
+
+local ffi = require("ffi")
+ffi.cdef[[
+int MessageBoxA(void *w, const char *txt, const 
char *cap, int type);
+]]
+ffi.C.MessageBoxA(nil, "Hello world!", "Test", 0)
+
+
+Bing! Again, that was far too easy, no?
+
+
+Compare this with the effort required to bind that function using the
+classic Lua/C API: create an extra C file, add a C function
+that retrieves and checks the argument types passed from Lua and calls
+the actual C function, add a list of module functions and their
+names, add a luaopen_* function and register all module
+functions, compile and link it into a shared library (DLL), move it to
+the proper path, add Lua code that loads the module nd ... finally
+call the binding function. Phew!
+
+
+Motivating Example: Using C Data Structures
+
+The FFI library allows you to create and access C data
+structures. Of course the main use for this is for interfacing with
+C functions. But they can be used stand-alone, too.
+
+
+Lua is built upon high-level data types. They are flexible, extensible
+and dynamic. That's why we all love Lua so much. Alas, this can be
+inefficient for certain tasks, where you'd really want a low-level
+data type. E.g. a large array of a fixed structure needs to be
+implemented with a big table holding lots of tiny tables. This imposes
+both a substantial memory overhead as well as a performance overhead.
+
+
+Here's a sketch of a library that operates on color images plus a
+simple benchmark. First, the plain Lua version:
+
+
+local floor = math.floor
+
+local function image_ramp_green(n)
+  local img = {}
+  local f = 255/(n-1)
+  for i=1,n do
+img[i] = { red = 0, green = floor((i-1)*f), blue = 0, alpha = 255 }
+  end
+  return img
+end
+
+local function image_to_grey(img, n)
+  for i=1,n do
+local y = floor(0.3*img[i].red + 0.59*img[i].green + 0.11*img[i].blue)
+img[i].red = y; img[i].green = y; img[i].blue = y
+  end
+end
+
+local N = 400*400
+local img = image_ramp_green(N)
+for i=1,1000 do
+  image_to_grey(img, N)
+end
+
+
+This creates a table with

[22/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_cparse.c
--
diff --git a/lib/luajit/src/lj_cparse.c b/lib/luajit/src/lj_cparse.c
new file mode 100644
index 000..b9df88d
--- /dev/null
+++ b/lib/luajit/src/lj_cparse.c
@@ -0,0 +1,1872 @@
+/*
+** C declaration parser.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#include "lj_obj.h"
+
+#if LJ_HASFFI
+
+#include "lj_gc.h"
+#include "lj_err.h"
+#include "lj_str.h"
+#include "lj_ctype.h"
+#include "lj_cparse.h"
+#include "lj_frame.h"
+#include "lj_vm.h"
+#include "lj_char.h"
+#include "lj_strscan.h"
+
+/*
+** Important note: this is NOT a validating C parser! This is a minimal
+** C declaration parser, solely for use by the LuaJIT FFI.
+**
+** It ought to return correct results for properly formed C declarations,
+** but it may accept some invalid declarations, too (and return nonsense).
+** Also, it shows rather generic error messages to avoid unnecessary bloat.
+** If in doubt, please check the input against your favorite C compiler.
+*/
+
+/* -- C lexer - */
+
+/* C lexer token names. */
+static const char *const ctoknames[] = {
+#define CTOKSTR(name, str) str,
+CTOKDEF(CTOKSTR)
+#undef CTOKSTR
+  NULL
+};
+
+/* Forward declaration. */
+LJ_NORET static void cp_err(CPState *cp, ErrMsg em);
+
+static const char *cp_tok2str(CPState *cp, CPToken tok)
+{
+  lua_assert(tok < CTOK_FIRSTDECL);
+  if (tok > CTOK_OFS)
+return ctoknames[tok-CTOK_OFS-1];
+  else if (!lj_char_iscntrl(tok))
+return lj_str_pushf(cp->L, "%c", tok);
+  else
+return lj_str_pushf(cp->L, "char(%d)", tok);
+}
+
+/* End-of-line? */
+static LJ_AINLINE int cp_iseol(CPChar c)
+{
+  return (c == '\n' || c == '\r');
+}
+
+/* Peek next raw character. */
+static LJ_AINLINE CPChar cp_rawpeek(CPState *cp)
+{
+  return (CPChar)(uint8_t)(*cp->p);
+}
+
+static LJ_NOINLINE CPChar cp_get_bs(CPState *cp);
+
+/* Get next character. */
+static LJ_AINLINE CPChar cp_get(CPState *cp)
+{
+  cp->c = (CPChar)(uint8_t)(*cp->p++);
+  if (LJ_LIKELY(cp->c != '\\')) return cp->c;
+  return cp_get_bs(cp);
+}
+
+/* Transparently skip backslash-escaped line breaks. */
+static LJ_NOINLINE CPChar cp_get_bs(CPState *cp)
+{
+  CPChar c2, c = cp_rawpeek(cp);
+  if (!cp_iseol(c)) return cp->c;
+  cp->p++;
+  c2 = cp_rawpeek(cp);
+  if (cp_iseol(c2) && c2 != c) cp->p++;
+  cp->linenumber++;
+  return cp_get(cp);
+}
+
+/* Grow save buffer. */
+static LJ_NOINLINE void cp_save_grow(CPState *cp, CPChar c)
+{
+  MSize newsize;
+  if (cp->sb.sz >= CPARSE_MAX_BUF/2)
+cp_err(cp, LJ_ERR_XELEM);
+  newsize = cp->sb.sz * 2;
+  lj_str_resizebuf(cp->L, &cp->sb, newsize);
+  cp->sb.buf[cp->sb.n++] = (char)c;
+}
+
+/* Save character in buffer. */
+static LJ_AINLINE void cp_save(CPState *cp, CPChar c)
+{
+  if (LJ_UNLIKELY(cp->sb.n + 1 > cp->sb.sz))
+cp_save_grow(cp, c);
+  else
+cp->sb.buf[cp->sb.n++] = (char)c;
+}
+
+/* Skip line break. Handles "\n", "\r", "\r\n" or "\n\r". */
+static void cp_newline(CPState *cp)
+{
+  CPChar c = cp_rawpeek(cp);
+  if (cp_iseol(c) && c != cp->c) cp->p++;
+  cp->linenumber++;
+}
+
+LJ_NORET static void cp_errmsg(CPState *cp, CPToken tok, ErrMsg em, ...)
+{
+  const char *msg, *tokstr;
+  lua_State *L;
+  va_list argp;
+  if (tok == 0) {
+tokstr = NULL;
+  } else if (tok == CTOK_IDENT || tok == CTOK_INTEGER || tok == CTOK_STRING ||
+tok >= CTOK_FIRSTDECL) {
+if (cp->sb.n == 0) cp_save(cp, '$');
+cp_save(cp, '\0');
+tokstr = cp->sb.buf;
+  } else {
+tokstr = cp_tok2str(cp, tok);
+  }
+  L = cp->L;
+  va_start(argp, em);
+  msg = lj_str_pushvf(L, err2msg(em), argp);
+  va_end(argp);
+  if (tokstr)
+msg = lj_str_pushf(L, err2msg(LJ_ERR_XNEAR), msg, tokstr);
+  if (cp->linenumber > 1)
+msg = lj_str_pushf(L, "%s at line %d", msg, cp->linenumber);
+  lj_err_callermsg(L, msg);
+}
+
+LJ_NORET LJ_NOINLINE static void cp_err_token(CPState *cp, CPToken tok)
+{
+  cp_errmsg(cp, cp->tok, LJ_ERR_XTOKEN, cp_tok2str(cp, tok));
+}
+
+LJ_NORET LJ_NOINLINE static void cp_err_badidx(CPState *cp, CType *ct)
+{
+  GCstr *s = lj_ctype_repr(cp->cts->L, ctype_typeid(cp->cts, ct), NULL);
+  cp_errmsg(cp, 0, LJ_ERR_FFI_BADIDX, strdata(s));
+}
+
+LJ_NORET LJ_NOINLINE static void cp_err(CPState *cp, ErrMsg em)
+{
+  cp_errmsg(cp, 0, em);
+}
+
+/* -- Main lexical scanner  */
+
+/* Parse number literal. Only handles int32_t/uint32_t right now. */
+static CPToken cp_number(CPState *cp)
+{
+  StrScanFmt fmt;
+  TValue o;
+  do { cp_save(cp, cp->c); } while (lj_char_isident(cp_get(cp)));
+  cp_save(cp, '\0');
+  fmt = lj_strscan_scan((const uint8_t *)cp->sb.buf, &o, STRSCAN_OPT_C);
+  if (fmt == STRSCAN_INT) cp->val.id = CTID_INT32;
+  else if (fmt == STRSCAN_U32) cp->val.id = CTID_UINT32;
+  else if (!(cp->mode & CPARSE_MODE_SKIP))
+c

[35/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/host/minilua.c
--
diff --git a/lib/luajit/src/host/minilua.c b/lib/luajit/src/host/minilua.c
new file mode 100644
index 000..aee192a
--- /dev/null
+++ b/lib/luajit/src/host/minilua.c
@@ -0,0 +1,7770 @@
+/* This is a heavily customized and minimized copy of Lua 5.1.5. */
+/* It's only used to build LuaJIT. It does NOT have all standard functions! */
+/**
+* Copyright (C) 1994-2012 Lua.org, PUC-Rio.  All rights reserved.
+*
+* Permission is hereby granted, free of charge, to any person obtaining
+* a copy of this software and associated documentation files (the
+* "Software"), to deal in the Software without restriction, including
+* without limitation the rights to use, copy, modify, merge, publish,
+* distribute, sublicense, and/or sell copies of the Software, and to
+* permit persons to whom the Software is furnished to do so, subject to
+* the following conditions:
+*
+* The above copyright notice and this permission notice shall be
+* included in all copies or substantial portions of the Software.
+*
+* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+**/
+#ifdef _MSC_VER
+typedef unsigned __int64 U64;
+#else
+typedef unsigned long long U64;
+#endif
+int _CRT_glob = 0;
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+typedef enum{
+TM_INDEX,
+TM_NEWINDEX,
+TM_GC,
+TM_MODE,
+TM_EQ,
+TM_ADD,
+TM_SUB,
+TM_MUL,
+TM_DIV,
+TM_MOD,
+TM_POW,
+TM_UNM,
+TM_LEN,
+TM_LT,
+TM_LE,
+TM_CONCAT,
+TM_CALL,
+TM_N
+}TMS;
+enum OpMode{iABC,iABx,iAsBx};
+typedef enum{
+OP_MOVE,
+OP_LOADK,
+OP_LOADBOOL,
+OP_LOADNIL,
+OP_GETUPVAL,
+OP_GETGLOBAL,
+OP_GETTABLE,
+OP_SETGLOBAL,
+OP_SETUPVAL,
+OP_SETTABLE,
+OP_NEWTABLE,
+OP_SELF,
+OP_ADD,
+OP_SUB,
+OP_MUL,
+OP_DIV,
+OP_MOD,
+OP_POW,
+OP_UNM,
+OP_NOT,
+OP_LEN,
+OP_CONCAT,
+OP_JMP,
+OP_EQ,
+OP_LT,
+OP_LE,
+OP_TEST,
+OP_TESTSET,
+OP_CALL,
+OP_TAILCALL,
+OP_RETURN,
+OP_FORLOOP,
+OP_FORPREP,
+OP_TFORLOOP,
+OP_SETLIST,
+OP_CLOSE,
+OP_CLOSURE,
+OP_VARARG
+}OpCode;
+enum OpArgMask{
+OpArgN,
+OpArgU,
+OpArgR,
+OpArgK
+};
+typedef enum{
+VVOID,
+VNIL,
+VTRUE,
+VFALSE,
+VK,
+VKNUM,
+VLOCAL,
+VUPVAL,
+VGLOBAL,
+VINDEXED,
+VJMP,
+VRELOCABLE,
+VNONRELOC,
+VCALL,
+VVARARG
+}expkind;
+enum RESERVED{
+TK_AND=257,TK_BREAK,
+TK_DO,TK_ELSE,TK_ELSEIF,TK_END,TK_FALSE,TK_FOR,TK_FUNCTION,
+TK_IF,TK_IN,TK_LOCAL,TK_NIL,TK_NOT,TK_OR,TK_REPEAT,
+TK_RETURN,TK_THEN,TK_TRUE,TK_UNTIL,TK_WHILE,
+TK_CONCAT,TK_DOTS,TK_EQ,TK_GE,TK_LE,TK_NE,TK_NUMBER,
+TK_NAME,TK_STRING,TK_EOS
+};
+typedef enum BinOpr{
+OPR_ADD,OPR_SUB,OPR_MUL,OPR_DIV,OPR_MOD,OPR_POW,
+OPR_CONCAT,
+OPR_NE,OPR_EQ,
+OPR_LT,OPR_LE,OPR_GT,OPR_GE,
+OPR_AND,OPR_OR,
+OPR_NOBINOPR
+}BinOpr;
+typedef enum UnOpr{OPR_MINUS,OPR_NOT,OPR_LEN,OPR_NOUNOPR}UnOpr;
+#define LUA_QL(x)"'"x"'"
+#define luai_apicheck(L,o){(void)L;}
+#define lua_number2str(s,n)sprintf((s),"%.14g",(n))
+#define lua_str2number(s,p)strtod((s),(p))
+#define luai_numadd(a,b)((a)+(b))
+#define luai_numsub(a,b)((a)-(b))
+#define luai_nummul(a,b)((a)*(b))
+#define luai_numdiv(a,b)((a)/(b))
+#define luai_nummod(a,b)((a)-floor((a)/(b))*(b))
+#define luai_numpow(a,b)(pow(a,b))
+#define luai_numunm(a)(-(a))
+#define luai_numeq(a,b)((a)==(b))
+#define luai_numlt(a,b)((a)<(b))
+#define luai_numle(a,b)((a)<=(b))
+#define luai_numisnan(a)(!luai_numeq((a),(a)))
+#define lua_number2int(i,d)((i)=(int)(d))
+#define lua_number2integer(i,d)((i)=(lua_Integer)(d))
+#define LUAI_THROW(L,c)longjmp((c)->b,1)
+#define LUAI_TRY(L,c,a)if(setjmp((c)->b)==0){a}
+#define lua_pclose(L,file)((void)((void)L,file),0)
+#define lua_upvalueindex(i)((-10002)-(i))
+typedef struct lua_State lua_State;
+typedef int(*lua_CFunction)(lua_State*L);
+typedef const char*(*lua_Reader)(lua_State*L,void*ud,size_t*sz);
+typedef void*(*lua_Alloc)(void*ud,void*ptr,size_t osize,size_t nsize);
+typedef double lua_Number;
+typedef ptrdiff_t lua_Integer;
+static void lua_settop(lua_State*L,int idx);
+static int lua_type(lua_State*L,int idx);
+static const char* lua_tolstring(lua_State*L,int idx,size_t*len);
+static size_t lua_objlen(lua_State*L,int idx);
+static void lua_pushlstring(lua_State*L,const char*s,size_t l);
+static void lua_pushcclosure(lua_State*L,lua_CFunction fn,int n);
+static void lua_createtable(lua_State*L,int narr,int nrec);
+static void

[03/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/vm_x86.dasc
--
diff --git a/lib/luajit/src/vm_x86.dasc b/lib/luajit/src/vm_x86.dasc
new file mode 100644
index 000..6cdb8cb
--- /dev/null
+++ b/lib/luajit/src/vm_x86.dasc
@@ -0,0 +1,6377 @@
+|// Low-level VM code for x86 CPUs.
+|// Bytecode interpreter, fast functions and helper functions.
+|// Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+|
+|.if P64
+|.arch x64
+|.else
+|.arch x86
+|.endif
+|.section code_op, code_sub
+|
+|.actionlist build_actionlist
+|.globals GLOB_
+|.globalnames globnames
+|.externnames extnames
+|
+|//---
+|
+|.if P64
+|.define X64, 1
+|.define SSE, 1
+|.if WIN
+|.define X64WIN, 1
+|.endif
+|.endif
+|
+|// Fixed register assignments for the interpreter.
+|// This is very fragile and has many dependencies. Caveat emptor.
+|.define BASE, edx // Not C callee-save, refetched anyway.
+|.if not X64
+|.define KBASE,edi // Must be C callee-save.
+|.define KBASEa,   KBASE
+|.define PC,   esi // Must be C callee-save.
+|.define PCa,  PC
+|.define DISPATCH, ebx // Must be C callee-save.
+|.elif X64WIN
+|.define KBASE,edi // Must be C callee-save.
+|.define KBASEa,   rdi
+|.define PC,   esi // Must be C callee-save.
+|.define PCa,  rsi
+|.define DISPATCH, ebx // Must be C callee-save.
+|.else
+|.define KBASE,r15d// Must be C callee-save.
+|.define KBASEa,   r15
+|.define PC,   ebx // Must be C callee-save.
+|.define PCa,  rbx
+|.define DISPATCH, r14d// Must be C callee-save.
+|.endif
+|
+|.define RA,   ecx
+|.define RAH,  ch
+|.define RAL,  cl
+|.define RB,   ebp // Must be ebp (C callee-save).
+|.define RC,   eax // Must be eax.
+|.define RCW,  ax
+|.define RCH,  ah
+|.define RCL,  al
+|.define OP,   RB
+|.define RD,   RC
+|.define RDW,  RCW
+|.define RDL,  RCL
+|.if X64
+|.define RAa, rcx
+|.define RBa, rbp
+|.define RCa, rax
+|.define RDa, rax
+|.else
+|.define RAa, RA
+|.define RBa, RB
+|.define RCa, RC
+|.define RDa, RD
+|.endif
+|
+|.if not X64
+|.define FCARG1,   ecx // x86 fastcall arguments.
+|.define FCARG2,   edx
+|.elif X64WIN
+|.define CARG1,rcx // x64/WIN64 C call arguments.
+|.define CARG2,rdx
+|.define CARG3,r8
+|.define CARG4,r9
+|.define CARG1d,   ecx
+|.define CARG2d,   edx
+|.define CARG3d,   r8d
+|.define CARG4d,   r9d
+|.define FCARG1,   CARG1d  // Upwards compatible to x86 fastcall.
+|.define FCARG2,   CARG2d
+|.else
+|.define CARG1,rdi // x64/POSIX C call arguments.
+|.define CARG2,rsi
+|.define CARG3,rdx
+|.define CARG4,rcx
+|.define CARG5,r8
+|.define CARG6,r9
+|.define CARG1d,   edi
+|.define CARG2d,   esi
+|.define CARG3d,   edx
+|.define CARG4d,   ecx
+|.define CARG5d,   r8d
+|.define CARG6d,   r9d
+|.define FCARG1,   CARG1d  // Simulate x86 fastcall.
+|.define FCARG2,   CARG2d
+|.endif
+|
+|// Type definitions. Some of these are only used for documentation.
+|.type L,  lua_State
+|.type GL, global_State
+|.type TVALUE, TValue
+|.type GCOBJ,  GCobj
+|.type STR,GCstr
+|.type TAB,GCtab
+|.type LFUNC,  GCfuncL
+|.type CFUNC,  GCfuncC
+|.type PROTO,  GCproto
+|.type UPVAL,  GCupval
+|.type NODE,   Node
+|.type NARGS,  int
+|.type TRACE,  GCtrace
+|
+|// Stack layout while in interpreter. Must match with lj_frame.h.
+|//---
+|.if not X64   // x86 stack layout.
+|
+|.define CFRAME_SPACE, aword*7 // Delta for esp (see <--).
+|.macro saveregs_
+|  push edi; push esi; push ebx
+|  sub esp, CFRAME_SPACE
+|.endmacro
+|.macro saveregs
+|  push ebp; saveregs_
+|.endmacro
+|.macro restoreregs
+|  add esp, CFRAME_SPACE
+|  pop ebx; pop esi; pop edi; pop ebp
+|.endmacro
+|
+|.define SAVE_ERRF,aword [esp+aword*15]// vm_pcall/vm_cpcall only.
+|.define SAVE_NRES,aword [esp+aword*14]
+|.define SAVE_CFRAME,  aword [esp+aword*13]
+|.define SAVE_L,   aword [esp+aword*12]
+|//- 16 byte aligned, ^^^ arguments from C caller
+|.define SAVE_RET, aword [esp+aword*11]//<-- esp entering interpreter.
+|.define SAVE_R4,  aword [esp+aword*10]
+|.define SAVE_R3,  aword [esp+aword*9]
+|

[20/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_ctype.h
--
diff --git a/lib/luajit/src/lj_ctype.h b/lib/luajit/src/lj_ctype.h
new file mode 100644
index 000..3df26f0
--- /dev/null
+++ b/lib/luajit/src/lj_ctype.h
@@ -0,0 +1,461 @@
+/*
+** C type management.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#ifndef _LJ_CTYPE_H
+#define _LJ_CTYPE_H
+
+#include "lj_obj.h"
+#include "lj_gc.h"
+
+#if LJ_HASFFI
+
+/* -- C type definitions -- */
+
+/* C type numbers. Highest 4 bits of C type info. ORDER CT. */
+enum {
+  /* Externally visible types. */
+  CT_NUM,  /* Integer or floating-point numbers. */
+  CT_STRUCT,   /* Struct or union. */
+  CT_PTR,  /* Pointer or reference. */
+  CT_ARRAY,/* Array or complex type. */
+  CT_MAYCONVERT = CT_ARRAY,
+  CT_VOID, /* Void type. */
+  CT_ENUM, /* Enumeration. */
+  CT_HASSIZE = CT_ENUM,  /* Last type where ct->size holds the actual size. */
+  CT_FUNC, /* Function. */
+  CT_TYPEDEF,  /* Typedef. */
+  CT_ATTRIB,   /* Miscellaneous attributes. */
+  /* Internal element types. */
+  CT_FIELD,/* Struct/union field or function parameter. */
+  CT_BITFIELD, /* Struct/union bitfield. */
+  CT_CONSTVAL, /* Constant value. */
+  CT_EXTERN,   /* External reference. */
+  CT_KW/* Keyword. */
+};
+
+LJ_STATIC_ASSERT(((int)CT_PTR & (int)CT_ARRAY) == CT_PTR);
+LJ_STATIC_ASSERT(((int)CT_STRUCT & (int)CT_ARRAY) == CT_STRUCT);
+
+/*
+**  -- info 
+** |type  flags...  A   cid | size   |  sib  | next  | name  |
+** +++---+---+---+--
+** |NUM   BFvcUL..  A   | size   |   | type  |   |
+** |STRUCT..vcU..V  A   | size   | field | name? | name? |
+** |PTR   ..vcR...  A   cid | size   |   | type  |   |
+** |ARRAY VCvc...V  A   cid | size   |   | type  |   |
+** |VOID  ..vc  A   | size   |   | type  |   |
+** |ENUMA   cid | size   | const | name? | name? |
+** |FUNC  VS.. cc   cid | nargs  | field | name? | name? |
+** |TYPEDEF cid ||   | name  | name  |
+** |ATTRIBattrnum   cid | attr   | sib?  | type? |   |
+** |FIELD   cid | offset | field |   | name? |
+** |BITFIELD  B.vcU csz bsz pos | offset | field |   | name? |
+** |CONSTVAL c  cid | value  | const | name  | name  |
+** |EXTERN  cid || sib?  | name  | name  |
+** |KW  tok | size   |   | name  | name  |
+** +++---+---+---+--
+**^^  ^^--- bits used for C type conversion dispatch
+*/
+
+/* C type info flags. TFFA  */
+#define CTF_BOOL   0x0800u /* Boolean: NUM, BITFIELD. */
+#define CTF_FP 0x0400u /* Floating-point: NUM. */
+#define CTF_CONST  0x0200u /* Const qualifier. */
+#define CTF_VOLATILE   0x0100u /* Volatile qualifier. */
+#define CTF_UNSIGNED   0x0080u /* Unsigned: NUM, BITFIELD. */
+#define CTF_LONG   0x0040u /* Long: NUM. */
+#define CTF_VLA0x0010u /* Variable-length: ARRAY, 
STRUCT. */
+#define CTF_REF0x0080u /* Reference: PTR. */
+#define CTF_VECTOR 0x0800u /* Vector: ARRAY. */
+#define CTF_COMPLEX0x0400u /* Complex: ARRAY. */
+#define CTF_UNION  0x0080u /* Union: STRUCT. */
+#define CTF_VARARG 0x0080u /* Vararg: FUNC. */
+#define CTF_SSEREGPARM 0x0040u /* SSE register parameters: FUNC. */
+
+#define CTF_QUAL   (CTF_CONST|CTF_VOLATILE)
+#define CTF_ALIGN  (CTMASK_ALIGN< 0 ? CTF_UNSIGNED : 0)
+
+/* Flags used in parser.  .F.Ammvf   cp->attr  */
+#define CTFP_ALIGNED   0x0001u /* cp->attr + ALIGN */
+#define CTFP_PACKED0x0002u /* cp->attr */
+/*...C...f   cp->fattr */
+#define CTFP_CCONV 0x0001u /* cp->fattr + CCONV/[SSE]REGPARM */
+
+/* C type info bitfields. */
+#define CTMASK_CID 0xu /* Max. 65536 type IDs. */
+#define CTMASK_NUM 0xf000u /* Max. 16 type numbers. */
+#define CTSHIFT_NUM28
+#define CTMASK_ALIGN   15  /* Max. alignment is 2^15. */
+#define CTSHIFT_ALIGN  16
+#define CTMASK_ATTRIB  255 /* Max. 256 attributes. */
+#define CTSHIFT_ATTRIB 16
+#define CTMASK_CCONV   3   /* Max. 4 calling conventions. */
+#define CTSHIFT_CCONV  16
+#define CTMASK_REGPARM 3   /* Max. 0-3 regparms. */
+#define CTSHIFT_REGPARM18
+/* Bitfields only used in parser. */
+#define CTMASK_VSIZEP  15  /* Max. vector size is 2^15. 

[12/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_parse.c
--
diff --git a/lib/luajit/src/lj_parse.c b/lib/luajit/src/lj_parse.c
new file mode 100644
index 000..abfac3c
--- /dev/null
+++ b/lib/luajit/src/lj_parse.c
@@ -0,0 +1,2754 @@
+/*
+** Lua parser (source code -> bytecode).
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+**
+** Major portions taken verbatim or adapted from the Lua interpreter.
+** Copyright (C) 1994-2008 Lua.org, PUC-Rio. See Copyright Notice in lua.h
+*/
+
+#define lj_parse_c
+#define LUA_CORE
+
+#include "lj_obj.h"
+#include "lj_gc.h"
+#include "lj_err.h"
+#include "lj_debug.h"
+#include "lj_str.h"
+#include "lj_tab.h"
+#include "lj_func.h"
+#include "lj_state.h"
+#include "lj_bc.h"
+#if LJ_HASFFI
+#include "lj_ctype.h"
+#endif
+#include "lj_lex.h"
+#include "lj_parse.h"
+#include "lj_vm.h"
+#include "lj_vmevent.h"
+
+/* -- Parser structures and definitions --- */
+
+/* Expression kinds. */
+typedef enum {
+  /* Constant expressions must be first and in this order: */
+  VKNIL,
+  VKFALSE,
+  VKTRUE,
+  VKSTR,   /* sval = string value */
+  VKNUM,   /* nval = number value */
+  VKLAST = VKNUM,
+  VKCDATA, /* nval = cdata value, not treated as a constant expression */
+  /* Non-constant expressions follow: */
+  VLOCAL,  /* info = local register, aux = vstack index */
+  VUPVAL,  /* info = upvalue index, aux = vstack index */
+  VGLOBAL, /* sval = string value */
+  VINDEXED,/* info = table register, aux = index reg/byte/string const */
+  VJMP,/* info = instruction PC */
+  VRELOCABLE,  /* info = instruction PC */
+  VNONRELOC,   /* info = result register */
+  VCALL,   /* info = instruction PC, aux = base */
+  VVOID
+} ExpKind;
+
+/* Expression descriptor. */
+typedef struct ExpDesc {
+  union {
+struct {
+  uint32_t info;   /* Primary info. */
+  uint32_t aux;/* Secondary info. */
+} s;
+TValue nval;   /* Number value. */
+GCstr *sval;   /* String value. */
+  } u;
+  ExpKind k;
+  BCPos t; /* True condition jump list. */
+  BCPos f; /* False condition jump list. */
+} ExpDesc;
+
+/* Macros for expressions. */
+#define expr_hasjump(e)((e)->t != (e)->f)
+
+#define expr_isk(e)((e)->k <= VKLAST)
+#define expr_isk_nojump(e) (expr_isk(e) && !expr_hasjump(e))
+#define expr_isnumk(e) ((e)->k == VKNUM)
+#define expr_isnumk_nojump(e)  (expr_isnumk(e) && !expr_hasjump(e))
+#define expr_isstrk(e) ((e)->k == VKSTR)
+
+#define expr_numtv(e)  check_exp(expr_isnumk((e)), &(e)->u.nval)
+#define expr_numberV(e)numberVnum(expr_numtv((e)))
+
+/* Initialize expression. */
+static LJ_AINLINE void expr_init(ExpDesc *e, ExpKind k, uint32_t info)
+{
+  e->k = k;
+  e->u.s.info = info;
+  e->f = e->t = NO_JMP;
+}
+
+/* Check number constant for +-0. */
+static int expr_numiszero(ExpDesc *e)
+{
+  TValue *o = expr_numtv(e);
+  return tvisint(o) ? (intV(o) == 0) : tviszero(o);
+}
+
+/* Per-function linked list of scope blocks. */
+typedef struct FuncScope {
+  struct FuncScope *prev;  /* Link to outer scope. */
+  MSize vstart;/* Start of block-local variables. */
+  uint8_t nactvar; /* Number of active vars outside the scope. */
+  uint8_t flags;   /* Scope flags. */
+} FuncScope;
+
+#define FSCOPE_LOOP0x01/* Scope is a (breakable) loop. */
+#define FSCOPE_BREAK   0x02/* Break used in scope. */
+#define FSCOPE_GOLA0x04/* Goto or label used in scope. */
+#define FSCOPE_UPVAL   0x08/* Upvalue in scope. */
+#define FSCOPE_NOCLOSE 0x10/* Do not close upvalues. */
+
+#define NAME_BREAK ((GCstr *)(uintptr_t)1)
+
+/* Index into variable stack. */
+typedef uint16_t VarIndex;
+#define LJ_MAX_VSTACK  (65536 - LJ_MAX_UPVAL)
+
+/* Variable/goto/label info. */
+#define VSTACK_VAR_RW  0x01/* R/W variable. */
+#define VSTACK_GOTO0x02/* Pending goto. */
+#define VSTACK_LABEL   0x04/* Label. */
+
+/* Per-function state. */
+typedef struct FuncState {
+  GCtab *kt;   /* Hash table for constants. */
+  LexState *ls;/* Lexer state. */
+  lua_State *L;/* Lua state. */
+  FuncScope *bl;   /* Current scope. */
+  struct FuncState *prev;  /* Enclosing function. */
+  BCPos pc;/* Next bytecode position. */
+  BCPos lasttarget;/* Bytecode position of last jump target. */
+  BCPos jpc;   /* Pending jump list to next bytecode. */
+  BCReg freereg;   /* First free register. */
+  BCReg nactvar;   /* Number of active local variables. */
+  BCReg nkn, nkgc; /* N

[04/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/vm_ppcspe.dasc
--
diff --git a/lib/luajit/src/vm_ppcspe.dasc b/lib/luajit/src/vm_ppcspe.dasc
new file mode 100644
index 000..53ea2d9
--- /dev/null
+++ b/lib/luajit/src/vm_ppcspe.dasc
@@ -0,0 +1,3691 @@
+|// Low-level VM code for PowerPC/e500 CPUs.
+|// Bytecode interpreter, fast functions and helper functions.
+|// Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+|
+|.arch ppc
+|.section code_op, code_sub
+|
+|.actionlist build_actionlist
+|.globals GLOB_
+|.globalnames globnames
+|.externnames extnames
+|
+|// Note: The ragged indentation of the instructions is intentional.
+|//   The starting columns indicate data dependencies.
+|
+|//---
+|
+|// Fixed register assignments for the interpreter.
+|// Don't use: r1 = sp, r2 and r13 = reserved and/or small data area ptr
+|
+|// The following must be C callee-save (but BASE is often refetched).
+|.define BASE, r14 // Base of current Lua stack frame.
+|.define KBASE,r15 // Constants of current Lua function.
+|.define PC,   r16 // Next PC.
+|.define DISPATCH, r17 // Opcode dispatch table.
+|.define LREG, r18 // Register holding lua_State (also in SAVE_L).
+|.define MULTRES,  r19 // Size of multi-result: (nresults+1)*8.
+|
+|// Constants for vectorized type-comparisons (hi+low GPR). C callee-save.
+|.define TISNUM,   r22
+|.define TISSTR,   r23
+|.define TISTAB,   r24
+|.define TISFUNC,  r25
+|.define TISNIL,   r26
+|.define TOBIT,r27
+|.define ZERO, TOBIT   // Zero in lo word.
+|
+|// The following temporaries are not saved across C calls, except for RA.
+|.define RA,   r20 // Callee-save.
+|.define RB,   r10
+|.define RC,   r11
+|.define RD,   r12
+|.define INS,  r7  // Overlaps CARG5.
+|
+|.define TMP0, r0
+|.define TMP1, r8
+|.define TMP2, r9
+|.define TMP3, r6  // Overlaps CARG4.
+|
+|// Saved temporaries.
+|.define SAVE0,r21
+|
+|// Calling conventions.
+|.define CARG1,r3
+|.define CARG2,r4
+|.define CARG3,r5
+|.define CARG4,r6  // Overlaps TMP3.
+|.define CARG5,r7  // Overlaps INS.
+|
+|.define CRET1,r3
+|.define CRET2,r4
+|
+|// Stack layout while in interpreter. Must match with lj_frame.h.
+|.define SAVE_LR,  188(sp)
+|.define CFRAME_SPACE, 184 // Delta for sp.
+|// Back chain for sp: 184(sp) <-- sp entering interpreter
+|.define SAVE_r31, 176(sp) // 64 bit register saves.
+|.define SAVE_r30, 168(sp)
+|.define SAVE_r29, 160(sp)
+|.define SAVE_r28, 152(sp)
+|.define SAVE_r27, 144(sp)
+|.define SAVE_r26, 136(sp)
+|.define SAVE_r25, 128(sp)
+|.define SAVE_r24, 120(sp)
+|.define SAVE_r23, 112(sp)
+|.define SAVE_r22, 104(sp)
+|.define SAVE_r21, 96(sp)
+|.define SAVE_r20, 88(sp)
+|.define SAVE_r19, 80(sp)
+|.define SAVE_r18, 72(sp)
+|.define SAVE_r17, 64(sp)
+|.define SAVE_r16, 56(sp)
+|.define SAVE_r15, 48(sp)
+|.define SAVE_r14, 40(sp)
+|.define SAVE_CR,  36(sp)
+|.define UNUSED1,  32(sp)
+|.define SAVE_ERRF,28(sp)  // 32 bit C frame info.
+|.define SAVE_NRES,24(sp)
+|.define SAVE_CFRAME,  20(sp)
+|.define SAVE_L,   16(sp)
+|.define SAVE_PC,  12(sp)
+|.define SAVE_MULTRES, 8(sp)
+|// Next frame lr: 4(sp)
+|// Back chain for sp: 0(sp)   <-- sp while in interpreter
+|
+|.macro save_, reg; evstdd reg, SAVE_..reg; .endmacro
+|.macro rest_, reg; evldd reg, SAVE_..reg; .endmacro
+|
+|.macro saveregs
+|  stwu sp, -CFRAME_SPACE(sp)
+|  save_ r14; save_ r15; save_ r16; save_ r17; save_ r18; save_ r19
+|  mflr r0; mfcr r12
+|  save_ r20; save_ r21; save_ r22; save_ r23; save_ r24; save_ r25
+|  stw  r0, SAVE_LR; stw r12, SAVE_CR
+|  save_ r26; save_ r27; save_ r28; save_ r29; save_ r30; save_ r31
+|.endmacro
+|
+|.macro restoreregs
+|  lwz r0, SAVE_LR; lwz r12, SAVE_CR
+|  rest_ r14; rest_ r15; rest_ r16; rest_ r17; rest_ r18; rest_ r19
+|  mtlr r0; mtcrf 0x38, r12
+|  rest_ r20; rest_ r21; rest_ r22; rest_ r23; rest_ r24; rest_ r25
+|  rest_ r26; rest_ r27; rest_ r28; rest_ r29; rest_ r30; rest_ r31
+|  addi sp, sp, CFRAME_SPACE
+|.endmacro
+|
+|// Type definitions. Some of these are only used for documentation.
+|.type L,  lua_State,  LREG
+|.type GL, global_State
+|.type TVALUE, TValue
+|.type GCOBJ,  GCobj
+|.type STR,GCstr
+|.type TAB,GCtab
+|.type LFUNC,  GCfuncL
+|.type CFUNC,  GCfuncC
+|.type PROTO,  GCproto
+|.type UPVAL,  GCupval
+|.type NODE,   Node
+|.type NARGS8, 

[33/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/jit/dis_x86.lua
--
diff --git a/lib/luajit/src/jit/dis_x86.lua b/lib/luajit/src/jit/dis_x86.lua
new file mode 100644
index 000..078d609
--- /dev/null
+++ b/lib/luajit/src/jit/dis_x86.lua
@@ -0,0 +1,836 @@
+
+-- LuaJIT x86/x64 disassembler module.
+--
+-- Copyright (C) 2005-2015 Mike Pall. All rights reserved.
+-- Released under the MIT license. See Copyright Notice in luajit.h
+
+-- This is a helper module used by the LuaJIT machine code dumper module.
+--
+-- Sending small code snippets to an external disassembler and mixing the
+-- output with our own stuff was too fragile. So I had to bite the bullet
+-- and write yet another x86 disassembler. Oh well ...
+--
+-- The output format is very similar to what ndisasm generates. But it has
+-- been developed independently by looking at the opcode tables from the
+-- Intel and AMD manuals. The supported instruction set is quite extensive
+-- and reflects what a current generation Intel or AMD CPU implements in
+-- 32 bit and 64 bit mode. Yes, this includes MMX, SSE, SSE2, SSE3, SSSE3,
+-- SSE4.1, SSE4.2, SSE4a and even privileged and hypervisor (VMX/SVM)
+-- instructions.
+--
+-- Notes:
+-- * The (useless) a16 prefix, 3DNow and pre-586 opcodes are unsupported.
+-- * No attempt at optimization has been made -- it's fast enough for my needs.
+-- * The public API may change when more architectures are added.
+--
+
+local type = type
+local sub, byte, format = string.sub, string.byte, string.format
+local match, gmatch, gsub = string.match, string.gmatch, string.gsub
+local lower, rep = string.lower, string.rep
+
+-- Map for 1st opcode byte in 32 bit mode. Ugly? Well ... read on.
+local map_opc1_32 = {
+--0x
+[0]="addBmr","addVmr","addBrm","addVrm","addBai","addVai","push es","pop es",
+"orBmr","orVmr","orBrm","orVrm","orBai","orVai","push cs","opc2*",
+--1x
+"adcBmr","adcVmr","adcBrm","adcVrm","adcBai","adcVai","push ss","pop ss",
+"sbbBmr","sbbVmr","sbbBrm","sbbVrm","sbbBai","sbbVai","push ds","pop ds",
+--2x
+"andBmr","andVmr","andBrm","andVrm","andBai","andVai","es:seg","daa",
+"subBmr","subVmr","subBrm","subVrm","subBai","subVai","cs:seg","das",
+--3x
+"xorBmr","xorVmr","xorBrm","xorVrm","xorBai","xorVai","ss:seg","aaa",
+"cmpBmr","cmpVmr","cmpBrm","cmpVrm","cmpBai","cmpVai","ds:seg","aas",
+--4x
+"incVR","incVR","incVR","incVR","incVR","incVR","incVR","incVR",
+"decVR","decVR","decVR","decVR","decVR","decVR","decVR","decVR",
+--5x
+"pushUR","pushUR","pushUR","pushUR","pushUR","pushUR","pushUR","pushUR",
+"popUR","popUR","popUR","popUR","popUR","popUR","popUR","popUR",
+--6x
+"sz*pushaw,pusha","sz*popaw,popa","boundVrm","arplWmr",
+"fs:seg","gs:seg","o16:","a16",
+"pushUi","imulVrmi","pushBs","imulVrms",
+"insb","insVS","outsb","outsVS",
+--7x
+"joBj","jnoBj","jbBj","jnbBj","jzBj","jnzBj","jbeBj","jaBj",
+"jsBj","jnsBj","jpeBj","jpoBj","jlBj","jgeBj","jleBj","jgBj",
+--8x
+"arith!Bmi","arith!Vmi","arith!Bmi","arith!Vms",
+"testBmr","testVmr","xchgBrm","xchgVrm",
+"movBmr","movVmr","movBrm","movVrm",
+"movVmg","leaVrm","movWgm","popUm",
+--9x
+"nop*xchgVaR|pause|xchgWaR|repne nop","xchgVaR","xchgVaR","xchgVaR",
+"xchgVaR","xchgVaR","xchgVaR","xchgVaR",
+"sz*cbw,cwde,cdqe","sz*cwd,cdq,cqo","call farViw","wait",
+"sz*pushfw,pushf","sz*popfw,popf","sahf","lahf",
+--Ax
+"movBao","movVao","movBoa","movVoa",
+"movsb","movsVS","cmpsb","cmpsVS",
+"testBai","testVai","stosb","stosVS",
+"lodsb","lodsVS","scasb","scasVS",
+--Bx
+"movBRi","movBRi","movBRi","movBRi","movBRi","movBRi","movBRi","movBRi",
+"movVRI","movVRI","movVRI","movVRI","movVRI","movVRI","movVRI","movVRI",
+--Cx
+"shift!Bmu","shift!Vmu","retBw","ret","$lesVrm","$ldsVrm","movBmi","movVmi",
+"enterBwu","leave","retfBw","retf","int3","intBu","into","iretVS",
+--Dx
+"shift!Bm1","shift!Vm1","shift!Bmc","shift!Vmc","aamBu","aadBu","salc","xlatb",
+"fp*0","fp*1","fp*2","fp*3","fp*4","fp*5","fp*6","fp*7",
+--Ex
+"loopneBj","loopeBj","loopBj","sz*jcxzBj,jecxzBj,jrcxzBj",
+"inBau","inVau","outBua","outVua",
+"callVj","jmpVj","jmp farViw","jmpBj","inBad","inVad","outBda","outVda",
+--Fx
+"lock:","int1","repne:rep","rep:","hlt","cmc","testb!Bm","testv!Vm",
+"clc","stc","cli","sti","cld","std","incb!Bm","incd!Vm",
+}
+assert(#map_opc1_32 == 255)
+
+-- Map for 1st opcode byte in 64 bit mode (overrides only).
+local map_opc1_64 = setmetatable({
+  [0x06]=false, [0x07]=false, [0x0e]=false,
+  [0x16]=false, [0x17]=false, [0x1e]=false, [0x1f]=false,
+  [0x27]=false, [0x2f]=false, [0x37]=false, [0x3f]=false,
+  [0x60]=false, [0x61]=false, [0x62]=false, [0x63]="movsxdVrDmt", 
[0x67]="a32:",
+  [0x40]="rex*",   [0x41]="rex*b",   [0x42]="rex*x",   [0x

[19/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_emit_ppc.h
--
diff --git a/lib/luajit/src/lj_emit_ppc.h b/lib/luajit/src/lj_emit_ppc.h
new file mode 100644
index 000..14edf00
--- /dev/null
+++ b/lib/luajit/src/lj_emit_ppc.h
@@ -0,0 +1,238 @@
+/*
+** PPC instruction emitter.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+/* -- Emit basic instructions - */
+
+static void emit_tab(ASMState *as, PPCIns pi, Reg rt, Reg ra, Reg rb)
+{
+  *--as->mcp = pi | PPCF_T(rt) | PPCF_A(ra) | PPCF_B(rb);
+}
+
+#define emit_asb(as, pi, ra, rs, rb)   emit_tab(as, (pi), (rs), (ra), (rb))
+#define emit_as(as, pi, ra, rs)emit_tab(as, (pi), (rs), (ra), 
0)
+#define emit_ab(as, pi, ra, rb)emit_tab(as, (pi), 0, (ra), 
(rb))
+
+static void emit_tai(ASMState *as, PPCIns pi, Reg rt, Reg ra, int32_t i)
+{
+  *--as->mcp = pi | PPCF_T(rt) | PPCF_A(ra) | (i & 0x);
+}
+
+#define emit_ti(as, pi, rt, i) emit_tai(as, (pi), (rt), 0, (i))
+#define emit_ai(as, pi, ra, i) emit_tai(as, (pi), 0, (ra), (i))
+#define emit_asi(as, pi, ra, rs, i)emit_tai(as, (pi), (rs), (ra), (i))
+
+#define emit_fab(as, pi, rf, ra, rb) \
+  emit_tab(as, (pi), (rf)&31, (ra)&31, (rb)&31)
+#define emit_fb(as, pi, rf, rb)emit_tab(as, (pi), (rf)&31, 0, 
(rb)&31)
+#define emit_fac(as, pi, rf, ra, rc) \
+  emit_tab(as, (pi) | PPCF_C((rc) & 31), (rf)&31, (ra)&31, 0)
+#define emit_facb(as, pi, rf, ra, rc, rb) \
+  emit_tab(as, (pi) | PPCF_C((rc) & 31), (rf)&31, (ra)&31, (rb)&31)
+#define emit_fai(as, pi, rf, ra, i)emit_tai(as, (pi), (rf)&31, (ra), (i))
+
+static void emit_rot(ASMState *as, PPCIns pi, Reg ra, Reg rs,
+int32_t n, int32_t b, int32_t e)
+{
+  *--as->mcp = pi | PPCF_T(rs) | PPCF_A(ra) | PPCF_B(n) |
+  PPCF_MB(b) | PPCF_ME(e);
+}
+
+static void emit_slwi(ASMState *as, Reg ra, Reg rs, int32_t n)
+{
+  lua_assert(n >= 0 && n < 32);
+  emit_rot(as, PPCI_RLWINM, ra, rs, n, 0, 31-n);
+}
+
+static void emit_rotlwi(ASMState *as, Reg ra, Reg rs, int32_t n)
+{
+  lua_assert(n >= 0 && n < 32);
+  emit_rot(as, PPCI_RLWINM, ra, rs, n, 0, 31);
+}
+
+/* -- Emit loads/stores --- */
+
+/* Prefer rematerialization of BASE/L from global_State over spills. */
+#define emit_canremat(ref) ((ref) <= REF_BASE)
+
+/* Try to find a one step delta relative to another constant. */
+static int emit_kdelta1(ASMState *as, Reg t, int32_t i)
+{
+  RegSet work = ~as->freeset & RSET_GPR;
+  while (work) {
+Reg r = rset_picktop(work);
+IRRef ref = regcost_ref(as->cost[r]);
+lua_assert(r != t);
+if (ref < ASMREF_L) {
+  int32_t delta = i - (ra_iskref(ref) ? ra_krefk(as, ref) : IR(ref)->i);
+  if (checki16(delta)) {
+   emit_tai(as, PPCI_ADDI, t, r, delta);
+   return 1;
+  }
+}
+rset_clear(work, r);
+  }
+  return 0;  /* Failed. */
+}
+
+/* Load a 32 bit constant into a GPR. */
+static void emit_loadi(ASMState *as, Reg r, int32_t i)
+{
+  if (checki16(i)) {
+emit_ti(as, PPCI_LI, r, i);
+  } else {
+if ((i & 0x)) {
+  int32_t jgl = i32ptr(J2G(as->J));
+  if ((uint32_t)(i-jgl) < 65536) {
+   emit_tai(as, PPCI_ADDI, r, RID_JGL, i-jgl-32768);
+   return;
+  } else if (emit_kdelta1(as, r, i)) {
+   return;
+  }
+  emit_asi(as, PPCI_ORI, r, r, i);
+}
+emit_ti(as, PPCI_LIS, r, (i >> 16));
+  }
+}
+
+#define emit_loada(as, r, addr)emit_loadi(as, (r), 
i32ptr((addr)))
+
+static Reg ra_allock(ASMState *as, int32_t k, RegSet allow);
+
+/* Get/set from constant pointer. */
+static void emit_lsptr(ASMState *as, PPCIns pi, Reg r, void *p, RegSet allow)
+{
+  int32_t jgl = i32ptr(J2G(as->J));
+  int32_t i = i32ptr(p);
+  Reg base;
+  if ((uint32_t)(i-jgl) < 65536) {
+i = i-jgl-32768;
+base = RID_JGL;
+  } else {
+base = ra_allock(as, i-(int16_t)i, allow);
+  }
+  emit_tai(as, pi, r, base, i);
+}
+
+#define emit_loadn(as, r, tv) \
+  emit_lsptr(as, PPCI_LFD, ((r) & 31), (void *)(tv), RSET_GPR)
+
+/* Get/set global_State fields. */
+static void emit_lsglptr(ASMState *as, PPCIns pi, Reg r, int32_t ofs)
+{
+  emit_tai(as, pi, r, RID_JGL, ofs-32768);
+}
+
+#define emit_getgl(as, r, field) \
+  emit_lsglptr(as, PPCI_LWZ, (r), (int32_t)offsetof(global_State, field))
+#define emit_setgl(as, r, field) \
+  emit_lsglptr(as, PPCI_STW, (r), (int32_t)offsetof(global_State, field))
+
+/* Trace number is determined from per-trace exit stubs. */
+#define emit_setvmstate(as, i) UNUSED(i)
+
+/* -- Emit control-flow instructions -- */
+
+/* Label for internal jumps. */
+typedef MCode *MCLabel;
+
+/* Return label pointing to current PC. */
+#define emit_label(as) ((as)->mcp)
+
+static void emit_condbranch(ASMState *as, PPCIn

[24/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_bc.c
--
diff --git a/lib/luajit/src/lj_bc.c b/lib/luajit/src/lj_bc.c
new file mode 100644
index 000..a8f444c
--- /dev/null
+++ b/lib/luajit/src/lj_bc.c
@@ -0,0 +1,14 @@
+/*
+** Bytecode instruction modes.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#define lj_bc_c
+#define LUA_CORE
+
+#include "lj_obj.h"
+#include "lj_bc.h"
+
+/* Bytecode offsets and bytecode instruction modes. */
+#include "lj_bcdef.h"
+

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_bc.h
--
diff --git a/lib/luajit/src/lj_bc.h b/lib/luajit/src/lj_bc.h
new file mode 100644
index 000..7436fab
--- /dev/null
+++ b/lib/luajit/src/lj_bc.h
@@ -0,0 +1,261 @@
+/*
+** Bytecode instruction format.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#ifndef _LJ_BC_H
+#define _LJ_BC_H
+
+#include "lj_def.h"
+#include "lj_arch.h"
+
+/* Bytecode instruction format, 32 bit wide, fields of 8 or 16 bit:
+**
+** +++++
+** | B  | C  | A  | OP | Format ABC
+** +++++
+** |D| A  | OP | Format AD
+** +
+** MSB   LSB
+**
+** In-memory instructions are always stored in host byte order.
+*/
+
+/* Operand ranges and related constants. */
+#define BCMAX_A0xff
+#define BCMAX_B0xff
+#define BCMAX_C0xff
+#define BCMAX_D0x
+#define BCBIAS_J   0x8000
+#define NO_REG BCMAX_A
+#define NO_JMP (~(BCPos)0)
+
+/* Macros to get instruction fields. */
+#define bc_op(i)   ((BCOp)((i)&0xff))
+#define bc_a(i)((BCReg)(((i)>>8)&0xff))
+#define bc_b(i)((BCReg)((i)>>24))
+#define bc_c(i)((BCReg)(((i)>>16)&0xff))
+#define bc_d(i)((BCReg)((i)>>16))
+#define bc_j(i)((ptrdiff_t)bc_d(i)-BCBIAS_J)
+
+/* Macros to set instruction fields. */
+#define setbc_byte(p, x, ofs) \
+  ((uint8_t *)(p))[LJ_ENDIAN_SELECT(ofs, 3-ofs)] = (uint8_t)(x)
+#define setbc_op(p, x) setbc_byte(p, (x), 0)
+#define setbc_a(p, x)  setbc_byte(p, (x), 1)
+#define setbc_b(p, x)  setbc_byte(p, (x), 3)
+#define setbc_c(p, x)  setbc_byte(p, (x), 2)
+#define setbc_d(p, x) \
+  ((uint16_t *)(p))[LJ_ENDIAN_SELECT(1, 0)] = (uint16_t)(x)
+#define setbc_j(p, x)  setbc_d(p, (BCPos)((int32_t)(x)+BCBIAS_J))
+
+/* Macros to compose instructions. */
+#define BCINS_ABC(o, a, b, c) \
+  (((BCIns)(o))|((BCIns)(a)<<8)|((BCIns)(b)<<24)|((BCIns)(c)<<16))
+#define BCINS_AD(o, a, d) \
+  (((BCIns)(o))|((BCIns)(a)<<8)|((BCIns)(d)<<16))
+#define BCINS_AJ(o, a, j)  BCINS_AD(o, a, (BCPos)((int32_t)(j)+BCBIAS_J))
+
+/* Bytecode instruction definition. Order matters, see below.
+**
+** (name, filler, Amode, Bmode, Cmode or Dmode, metamethod)
+**
+** The opcode name suffixes specify the type for RB/RC or RD:
+** V = variable slot
+** S = string const
+** N = number const
+** P = primitive type (~itype)
+** B = unsigned byte literal
+** M = multiple args/results
+*/
+#define BCDEF(_) \
+  /* Comparison ops. ORDER OPR. */ \
+  _(ISLT,  var,___,var,lt) \
+  _(ISGE,  var,___,var,lt) \
+  _(ISLE,  var,___,var,le) \
+  _(ISGT,  var,___,var,le) \
+  \
+  _(ISEQV, var,___,var,eq) \
+  _(ISNEV, var,___,var,eq) \
+  _(ISEQS, var,___,str,eq) \
+  _(ISNES, var,___,str,eq) \
+  _(ISEQN, var,___,num,eq) \
+  _(ISNEN, var,___,num,eq) \
+  _(ISEQP, var,___,pri,eq) \
+  _(ISNEP, var,___,pri,eq) \
+  \
+  /* Unary test and copy ops. */ \
+  _(ISTC,  dst,___,var,___) \
+  _(ISFC,  dst,___,var,___) \
+  _(IST,   ___,___,var,___) \
+  _(ISF,   ___,___,var,___) \
+  \
+  /* Unary ops. */ \
+  _(MOV,   dst,___,var,___) \
+  _(NOT,   dst,___,var,___) \
+  _(UNM,   dst,___,var,unm) \
+  _(LEN,   dst,___,var,len) \
+  \
+  /* Binary ops. ORDER OPR. VV last, POW must be next. */ \
+  _(ADDVN, dst,var,num,add) \
+  _(SUBVN, dst,var,num,sub) \
+  _(MULVN, dst,var,num,mul) \
+  _(DIVVN, dst,var,num,div) \
+  _(MODVN, dst,var,num,mod) \
+  \
+  _(ADDNV, dst,var,num,add) \
+  _(SUBNV, dst,var,num,sub) \
+  _(MULNV, dst,var,num,mul) \
+  _(DIVNV, dst,var,num,div) \
+  _(MODNV, dst,var,num,mod) \
+  \
+  _(ADDVV, dst,var,var,add) \
+  _(SUBVV, dst,var,var,sub) \
+  _(MULVV, dst,var,var,mul) \
+  _(D

[23/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_ccallback.c
--
diff --git a/lib/luajit/src/lj_ccallback.c b/lib/luajit/src/lj_ccallback.c
new file mode 100644
index 000..b210641
--- /dev/null
+++ b/lib/luajit/src/lj_ccallback.c
@@ -0,0 +1,644 @@
+/*
+** FFI C callback handling.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#include "lj_obj.h"
+
+#if LJ_HASFFI
+
+#include "lj_gc.h"
+#include "lj_err.h"
+#include "lj_tab.h"
+#include "lj_state.h"
+#include "lj_frame.h"
+#include "lj_ctype.h"
+#include "lj_cconv.h"
+#include "lj_ccall.h"
+#include "lj_ccallback.h"
+#include "lj_target.h"
+#include "lj_mcode.h"
+#include "lj_trace.h"
+#include "lj_vm.h"
+
+/* -- Target-specific handling of callback slots -- */
+
+#define CALLBACK_MCODE_SIZE(LJ_PAGESIZE * LJ_NUM_CBPAGE)
+
+#if LJ_OS_NOJIT
+
+/* Disabled callback support. */
+#define CALLBACK_SLOT2OFS(slot)(0*(slot))
+#define CALLBACK_OFS2SLOT(ofs) (0*(ofs))
+#define CALLBACK_MAX_SLOT  0
+
+#elif LJ_TARGET_X86ORX64
+
+#define CALLBACK_MCODE_HEAD(LJ_64 ? 8 : 0)
+#define CALLBACK_MCODE_GROUP   (-2+1+2+5+(LJ_64 ? 6 : 5))
+
+#define CALLBACK_SLOT2OFS(slot) \
+  (CALLBACK_MCODE_HEAD + CALLBACK_MCODE_GROUP*((slot)/32) + 4*(slot))
+
+static MSize CALLBACK_OFS2SLOT(MSize ofs)
+{
+  MSize group;
+  ofs -= CALLBACK_MCODE_HEAD;
+  group = ofs / (32*4 + CALLBACK_MCODE_GROUP);
+  return (ofs % (32*4 + CALLBACK_MCODE_GROUP))/4 + group*32;
+}
+
+#define CALLBACK_MAX_SLOT \
+  (((CALLBACK_MCODE_SIZE-CALLBACK_MCODE_HEAD)/(CALLBACK_MCODE_GROUP+4*32))*32)
+
+#elif LJ_TARGET_ARM
+
+#define CALLBACK_MCODE_HEAD32
+#define CALLBACK_SLOT2OFS(slot)(CALLBACK_MCODE_HEAD + 8*(slot))
+#define CALLBACK_OFS2SLOT(ofs) (((ofs)-CALLBACK_MCODE_HEAD)/8)
+#define CALLBACK_MAX_SLOT  (CALLBACK_OFS2SLOT(CALLBACK_MCODE_SIZE))
+
+#elif LJ_TARGET_PPC
+
+#define CALLBACK_MCODE_HEAD24
+#define CALLBACK_SLOT2OFS(slot)(CALLBACK_MCODE_HEAD + 8*(slot))
+#define CALLBACK_OFS2SLOT(ofs) (((ofs)-CALLBACK_MCODE_HEAD)/8)
+#define CALLBACK_MAX_SLOT  (CALLBACK_OFS2SLOT(CALLBACK_MCODE_SIZE))
+
+#elif LJ_TARGET_MIPS
+
+#define CALLBACK_MCODE_HEAD24
+#define CALLBACK_SLOT2OFS(slot)(CALLBACK_MCODE_HEAD + 8*(slot))
+#define CALLBACK_OFS2SLOT(ofs) (((ofs)-CALLBACK_MCODE_HEAD)/8)
+#define CALLBACK_MAX_SLOT  (CALLBACK_OFS2SLOT(CALLBACK_MCODE_SIZE))
+
+#else
+
+/* Missing support for this architecture. */
+#define CALLBACK_SLOT2OFS(slot)(0*(slot))
+#define CALLBACK_OFS2SLOT(ofs) (0*(ofs))
+#define CALLBACK_MAX_SLOT  0
+
+#endif
+
+/* Convert callback slot number to callback function pointer. */
+static void *callback_slot2ptr(CTState *cts, MSize slot)
+{
+  return (uint8_t *)cts->cb.mcode + CALLBACK_SLOT2OFS(slot);
+}
+
+/* Convert callback function pointer to slot number. */
+MSize lj_ccallback_ptr2slot(CTState *cts, void *p)
+{
+  uintptr_t ofs = (uintptr_t)((uint8_t *)p -(uint8_t *)cts->cb.mcode);
+  if (ofs < CALLBACK_MCODE_SIZE) {
+MSize slot = CALLBACK_OFS2SLOT((MSize)ofs);
+if (CALLBACK_SLOT2OFS(slot) == (MSize)ofs)
+  return slot;
+  }
+  return ~0u;  /* Not a known callback function pointer. */
+}
+
+/* Initialize machine code for callback function pointers. */
+#if LJ_OS_NOJIT
+/* Disabled callback support. */
+#define callback_mcode_init(g, p)  UNUSED(p)
+#elif LJ_TARGET_X86ORX64
+static void callback_mcode_init(global_State *g, uint8_t *page)
+{
+  uint8_t *p = page;
+  uint8_t *target = (uint8_t *)(void *)lj_vm_ffi_callback;
+  MSize slot;
+#if LJ_64
+  *(void **)p = target; p += 8;
+#endif
+  for (slot = 0; slot < CALLBACK_MAX_SLOT; slot++) {
+/* mov al, slot; jmp group */
+*p++ = XI_MOVrib | RID_EAX; *p++ = (uint8_t)slot;
+if ((slot & 31) == 31 || slot == CALLBACK_MAX_SLOT-1) {
+  /* push ebp/rbp; mov ah, slot>>8; mov ebp, &g. */
+  *p++ = XI_PUSH + RID_EBP;
+  *p++ = XI_MOVrib | (RID_EAX+4); *p++ = (uint8_t)(slot >> 8);
+  *p++ = XI_MOVri | RID_EBP;
+  *(int32_t *)p = i32ptr(g); p += 4;
+#if LJ_64
+  /* jmp [rip-pageofs] where lj_vm_ffi_callback is stored. */
+  *p++ = XI_GROUP5; *p++ = XM_OFS0 + (XOg_JMP<<3) + RID_EBP;
+  *(int32_t *)p = (int32_t)(page-(p+4)); p += 4;
+#else
+  /* jmp lj_vm_ffi_callback. */
+  *p++ = XI_JMP; *(int32_t *)p = target-(p+4); p += 4;
+#endif
+} else {
+  *p++ = XI_JMPs; *p++ = (uint8_t)((2+2)*(31-(slot&31)) - 2);
+}
+  }
+  lua_assert(p - page <= CALLBACK_MCODE_SIZE);
+}
+#elif LJ_TARGET_ARM
+static void callback_mcode_init(global_State *g, uint32_t *page)
+{
+  uint32_t *p = page;
+  void *target = (void *)lj_vm_ffi_callback;
+  MSize slot;
+  /* This must match with the saveregs macro in buildvm_arm.dasc. */
+  *p++ = ARMI_SUB|ARMF_D(RID_R12)|ARMF_N(RID_R12)|ARMF_M(

[32/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lib_base.c
--
diff --git a/lib/luajit/src/lib_base.c b/lib/luajit/src/lib_base.c
new file mode 100644
index 000..17b9525
--- /dev/null
+++ b/lib/luajit/src/lib_base.c
@@ -0,0 +1,683 @@
+/*
+** Base and coroutine library.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+**
+** Major portions taken verbatim or adapted from the Lua interpreter.
+** Copyright (C) 1994-2011 Lua.org, PUC-Rio. See Copyright Notice in lua.h
+*/
+
+#include 
+
+#define lib_base_c
+#define LUA_LIB
+
+#include "lua.h"
+#include "lauxlib.h"
+#include "lualib.h"
+
+#include "lj_obj.h"
+#include "lj_gc.h"
+#include "lj_err.h"
+#include "lj_debug.h"
+#include "lj_str.h"
+#include "lj_tab.h"
+#include "lj_meta.h"
+#include "lj_state.h"
+#if LJ_HASFFI
+#include "lj_ctype.h"
+#include "lj_cconv.h"
+#endif
+#include "lj_bc.h"
+#include "lj_ff.h"
+#include "lj_dispatch.h"
+#include "lj_char.h"
+#include "lj_strscan.h"
+#include "lj_lib.h"
+
+/* -- Base library: checks  */
+
+#define LJLIB_MODULE_base
+
+LJLIB_ASM(assert)  LJLIB_REC(.)
+{
+  GCstr *s;
+  lj_lib_checkany(L, 1);
+  s = lj_lib_optstr(L, 2);
+  if (s)
+lj_err_callermsg(L, strdata(s));
+  else
+lj_err_caller(L, LJ_ERR_ASSERT);
+  return FFH_UNREACHABLE;
+}
+
+/* ORDER LJ_T */
+LJLIB_PUSH("nil")
+LJLIB_PUSH("boolean")
+LJLIB_PUSH(top-1)  /* boolean */
+LJLIB_PUSH("userdata")
+LJLIB_PUSH("string")
+LJLIB_PUSH("upval")
+LJLIB_PUSH("thread")
+LJLIB_PUSH("proto")
+LJLIB_PUSH("function")
+LJLIB_PUSH("trace")
+LJLIB_PUSH("cdata")
+LJLIB_PUSH("table")
+LJLIB_PUSH(top-9)  /* userdata */
+LJLIB_PUSH("number")
+LJLIB_ASM_(type)   LJLIB_REC(.)
+/* Recycle the lj_lib_checkany(L, 1) from assert. */
+
+/* -- Base library: iterators - */
+
+/* This solves a circular dependency problem -- change FF_next_N as needed. */
+LJ_STATIC_ASSERT((int)FF_next == FF_next_N);
+
+LJLIB_ASM(next)
+{
+  lj_lib_checktab(L, 1);
+  return FFH_UNREACHABLE;
+}
+
+#if LJ_52 || LJ_HASFFI
+static int ffh_pairs(lua_State *L, MMS mm)
+{
+  TValue *o = lj_lib_checkany(L, 1);
+  cTValue *mo = lj_meta_lookup(L, o, mm);
+  if ((LJ_52 || tviscdata(o)) && !tvisnil(mo)) {
+L->top = o+1;  /* Only keep one argument. */
+copyTV(L, L->base-1, mo);  /* Replace callable. */
+return FFH_TAILCALL;
+  } else {
+if (!tvistab(o)) lj_err_argt(L, 1, LUA_TTABLE);
+setfuncV(L, o-1, funcV(lj_lib_upvalue(L, 1)));
+if (mm == MM_pairs) setnilV(o+1); else setintV(o+1, 0);
+return FFH_RES(3);
+  }
+}
+#else
+#define ffh_pairs(L, mm)   (lj_lib_checktab(L, 1), FFH_UNREACHABLE)
+#endif
+
+LJLIB_PUSH(lastcl)
+LJLIB_ASM(pairs)
+{
+  return ffh_pairs(L, MM_pairs);
+}
+
+LJLIB_NOREGUV LJLIB_ASM(ipairs_aux)LJLIB_REC(.)
+{
+  lj_lib_checktab(L, 1);
+  lj_lib_checkint(L, 2);
+  return FFH_UNREACHABLE;
+}
+
+LJLIB_PUSH(lastcl)
+LJLIB_ASM(ipairs)  LJLIB_REC(.)
+{
+  return ffh_pairs(L, MM_ipairs);
+}
+
+/* -- Base library: getters and setters --- */
+
+LJLIB_ASM_(getmetatable)   LJLIB_REC(.)
+/* Recycle the lj_lib_checkany(L, 1) from assert. */
+
+LJLIB_ASM(setmetatable)LJLIB_REC(.)
+{
+  GCtab *t = lj_lib_checktab(L, 1);
+  GCtab *mt = lj_lib_checktabornil(L, 2);
+  if (!tvisnil(lj_meta_lookup(L, L->base, MM_metatable)))
+lj_err_caller(L, LJ_ERR_PROTMT);
+  setgcref(t->metatable, obj2gco(mt));
+  if (mt) { lj_gc_objbarriert(L, t, mt); }
+  settabV(L, L->base-1, t);
+  return FFH_RES(1);
+}
+
+LJLIB_CF(getfenv)
+{
+  GCfunc *fn;
+  cTValue *o = L->base;
+  if (!(o < L->top && tvisfunc(o))) {
+int level = lj_lib_optint(L, 1, 1);
+o = lj_debug_frame(L, level, &level);
+if (o == NULL)
+  lj_err_arg(L, 1, LJ_ERR_INVLVL);
+  }
+  fn = &gcval(o)->fn;
+  settabV(L, L->top++, isluafunc(fn) ? tabref(fn->l.env) : tabref(L->env));
+  return 1;
+}
+
+LJLIB_CF(setfenv)
+{
+  GCfunc *fn;
+  GCtab *t = lj_lib_checktab(L, 2);
+  cTValue *o = L->base;
+  if (!(o < L->top && tvisfunc(o))) {
+int level = lj_lib_checkint(L, 1);
+if (level == 0) {
+  /* NOBARRIER: A thread (i.e. L) is never black. */
+  setgcref(L->env, obj2gco(t));
+  return 0;
+}
+o = lj_debug_frame(L, level, &level);
+if (o == NULL)
+  lj_err_arg(L, 1, LJ_ERR_INVLVL);
+  }
+  fn = &gcval(o)->fn;
+  if (!isluafunc(fn))
+lj_err_caller(L, LJ_ERR_SETFENV);
+  setgcref(fn->l.env, obj2gco(t));
+  lj_gc_objbarrier(L, obj2gco(fn), t);
+  setfuncV(L, L->top++, fn);
+  return 1;
+}
+
+LJLIB_ASM(rawget)  LJLIB_REC(.)
+{
+  lj_lib_checktab(L, 1);
+  lj_lib_checkany(L, 2);
+  return FFH_UNREACHABLE;
+}
+
+LJLIB_CF(rawset)   LJLIB_REC(.)
+{
+  lj_lib_checktab(L, 1);
+  lj_lib_checkany(L, 2);
+  L->top = 1+lj_lib_checkany(L, 3);
+  lua_rawset(L, 1);
+

[10/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_snap.c
--
diff --git a/lib/luajit/src/lj_snap.c b/lib/luajit/src/lj_snap.c
new file mode 100644
index 000..5c870ba
--- /dev/null
+++ b/lib/luajit/src/lj_snap.c
@@ -0,0 +1,866 @@
+/*
+** Snapshot handling.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#define lj_snap_c
+#define LUA_CORE
+
+#include "lj_obj.h"
+
+#if LJ_HASJIT
+
+#include "lj_gc.h"
+#include "lj_tab.h"
+#include "lj_state.h"
+#include "lj_frame.h"
+#include "lj_bc.h"
+#include "lj_ir.h"
+#include "lj_jit.h"
+#include "lj_iropt.h"
+#include "lj_trace.h"
+#include "lj_snap.h"
+#include "lj_target.h"
+#if LJ_HASFFI
+#include "lj_ctype.h"
+#include "lj_cdata.h"
+#endif
+
+/* Some local macros to save typing. Undef'd at the end. */
+#define IR(ref)(&J->cur.ir[(ref)])
+
+/* Pass IR on to next optimization in chain (FOLD). */
+#define emitir(ot, a, b)   (lj_ir_set(J, (ot), (a), (b)), lj_opt_fold(J))
+
+/* Emit raw IR without passing through optimizations. */
+#define emitir_raw(ot, a, b)   (lj_ir_set(J, (ot), (a), (b)), lj_ir_emit(J))
+
+/* -- Snapshot buffer allocation -- */
+
+/* Grow snapshot buffer. */
+void lj_snap_grow_buf_(jit_State *J, MSize need)
+{
+  MSize maxsnap = (MSize)J->param[JIT_P_maxsnap];
+  if (need > maxsnap)
+lj_trace_err(J, LJ_TRERR_SNAPOV);
+  lj_mem_growvec(J->L, J->snapbuf, J->sizesnap, maxsnap, SnapShot);
+  J->cur.snap = J->snapbuf;
+}
+
+/* Grow snapshot map buffer. */
+void lj_snap_grow_map_(jit_State *J, MSize need)
+{
+  if (need < 2*J->sizesnapmap)
+need = 2*J->sizesnapmap;
+  else if (need < 64)
+need = 64;
+  J->snapmapbuf = (SnapEntry *)lj_mem_realloc(J->L, J->snapmapbuf,
+   J->sizesnapmap*sizeof(SnapEntry), need*sizeof(SnapEntry));
+  J->cur.snapmap = J->snapmapbuf;
+  J->sizesnapmap = need;
+}
+
+/* -- Snapshot generation - */
+
+/* Add all modified slots to the snapshot. */
+static MSize snapshot_slots(jit_State *J, SnapEntry *map, BCReg nslots)
+{
+  IRRef retf = J->chain[IR_RETF];  /* Limits SLOAD restore elimination. */
+  BCReg s;
+  MSize n = 0;
+  for (s = 0; s < nslots; s++) {
+TRef tr = J->slot[s];
+IRRef ref = tref_ref(tr);
+if (ref) {
+  SnapEntry sn = SNAP_TR(s, tr);
+  IRIns *ir = IR(ref);
+  if (!(sn & (SNAP_CONT|SNAP_FRAME)) &&
+ ir->o == IR_SLOAD && ir->op1 == s && ref > retf) {
+   /* No need to snapshot unmodified non-inherited slots. */
+   if (!(ir->op2 & IRSLOAD_INHERIT))
+ continue;
+   /* No need to restore readonly slots and unmodified non-parent slots. */
+   if (!(LJ_DUALNUM && (ir->op2 & IRSLOAD_CONVERT)) &&
+   (ir->op2 & (IRSLOAD_READONLY|IRSLOAD_PARENT)) != IRSLOAD_PARENT)
+ sn |= SNAP_NORESTORE;
+  }
+  if (LJ_SOFTFP && irt_isnum(ir->t))
+   sn |= SNAP_SOFTFPNUM;
+  map[n++] = sn;
+}
+  }
+  return n;
+}
+
+/* Add frame links at the end of the snapshot. */
+static BCReg snapshot_framelinks(jit_State *J, SnapEntry *map)
+{
+  cTValue *frame = J->L->base - 1;
+  cTValue *lim = J->L->base - J->baseslot;
+  cTValue *ftop = frame + funcproto(frame_func(frame))->framesize;
+  MSize f = 0;
+  map[f++] = SNAP_MKPC(J->pc);  /* The current PC is always the first entry. */
+  while (frame > lim) {  /* Backwards traversal of all frames above base. */
+if (frame_islua(frame)) {
+  map[f++] = SNAP_MKPC(frame_pc(frame));
+  frame = frame_prevl(frame);
+} else if (frame_iscont(frame)) {
+  map[f++] = SNAP_MKFTSZ(frame_ftsz(frame));
+  map[f++] = SNAP_MKPC(frame_contpc(frame));
+  frame = frame_prevd(frame);
+} else {
+  lua_assert(!frame_isc(frame));
+  map[f++] = SNAP_MKFTSZ(frame_ftsz(frame));
+  frame = frame_prevd(frame);
+  continue;
+}
+if (frame + funcproto(frame_func(frame))->framesize > ftop)
+  ftop = frame + funcproto(frame_func(frame))->framesize;
+  }
+  lua_assert(f == (MSize)(1 + J->framedepth));
+  return (BCReg)(ftop - lim);
+}
+
+/* Take a snapshot of the current stack. */
+static void snapshot_stack(jit_State *J, SnapShot *snap, MSize nsnapmap)
+{
+  BCReg nslots = J->baseslot + J->maxslot;
+  MSize nent;
+  SnapEntry *p;
+  /* Conservative estimate. */
+  lj_snap_grow_map(J, nsnapmap + nslots + (MSize)J->framedepth+1);
+  p = &J->cur.snapmap[nsnapmap];
+  nent = snapshot_slots(J, p, nslots);
+  snap->topslot = (uint8_t)snapshot_framelinks(J, p + nent);
+  snap->mapofs = (uint16_t)nsnapmap;
+  snap->ref = (IRRef1)J->cur.nins;
+  snap->nent = (uint8_t)nent;
+  snap->nslots = (uint8_t)nslots;
+  snap->count = 0;
+  J->cur.nsnapmap = (uint16_t)(nsnapmap + nent + 1 + J->framedepth);
+}
+
+/* Add or merge a snapshot. */
+void lj_snap_add(jit_State *J)
+{
+  MSize nsnap = J->cur.nsnap;
+  MSize nsnapmap = J->cur.

[16/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_mcode.c
--
diff --git a/lib/luajit/src/lj_mcode.c b/lib/luajit/src/lj_mcode.c
new file mode 100644
index 000..d95ebeb
--- /dev/null
+++ b/lib/luajit/src/lj_mcode.c
@@ -0,0 +1,386 @@
+/*
+** Machine code management.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#define lj_mcode_c
+#define LUA_CORE
+
+#include "lj_obj.h"
+#if LJ_HASJIT
+#include "lj_gc.h"
+#include "lj_err.h"
+#include "lj_jit.h"
+#include "lj_mcode.h"
+#include "lj_trace.h"
+#include "lj_dispatch.h"
+#endif
+#if LJ_HASJIT || LJ_HASFFI
+#include "lj_vm.h"
+#endif
+
+/* -- OS-specific functions --- */
+
+#if LJ_HASJIT || LJ_HASFFI
+
+/* Define this if you want to run LuaJIT with Valgrind. */
+#ifdef LUAJIT_USE_VALGRIND
+#include 
+#endif
+
+#if LJ_TARGET_IOS
+void sys_icache_invalidate(void *start, size_t len);
+#endif
+
+/* Synchronize data/instruction cache. */
+void lj_mcode_sync(void *start, void *end)
+{
+#ifdef LUAJIT_USE_VALGRIND
+  VALGRIND_DISCARD_TRANSLATIONS(start, (char *)end-(char *)start);
+#endif
+#if LJ_TARGET_X86ORX64
+  UNUSED(start); UNUSED(end);
+#elif LJ_TARGET_IOS
+  sys_icache_invalidate(start, (char *)end-(char *)start);
+#elif LJ_TARGET_PPC
+  lj_vm_cachesync(start, end);
+#elif defined(__GNUC__)
+  __clear_cache(start, end);
+#else
+#error "Missing builtin to flush instruction cache"
+#endif
+}
+
+#endif
+
+#if LJ_HASJIT
+
+#if LJ_TARGET_WINDOWS
+
+#define WIN32_LEAN_AND_MEAN
+#include 
+
+#define MCPROT_RW  PAGE_READWRITE
+#define MCPROT_RX  PAGE_EXECUTE_READ
+#define MCPROT_RWX PAGE_EXECUTE_READWRITE
+
+static void *mcode_alloc_at(jit_State *J, uintptr_t hint, size_t sz, DWORD 
prot)
+{
+  void *p = VirtualAlloc((void *)hint, sz,
+MEM_RESERVE|MEM_COMMIT|MEM_TOP_DOWN, prot);
+  if (!p && !hint)
+lj_trace_err(J, LJ_TRERR_MCODEAL);
+  return p;
+}
+
+static void mcode_free(jit_State *J, void *p, size_t sz)
+{
+  UNUSED(J); UNUSED(sz);
+  VirtualFree(p, 0, MEM_RELEASE);
+}
+
+static int mcode_setprot(void *p, size_t sz, DWORD prot)
+{
+  DWORD oprot;
+  return !VirtualProtect(p, sz, prot, &oprot);
+}
+
+#elif LJ_TARGET_POSIX
+
+#include 
+
+#ifndef MAP_ANONYMOUS
+#define MAP_ANONYMOUS  MAP_ANON
+#endif
+
+#define MCPROT_RW  (PROT_READ|PROT_WRITE)
+#define MCPROT_RX  (PROT_READ|PROT_EXEC)
+#define MCPROT_RWX (PROT_READ|PROT_WRITE|PROT_EXEC)
+
+static void *mcode_alloc_at(jit_State *J, uintptr_t hint, size_t sz, int prot)
+{
+  void *p = mmap((void *)hint, sz, prot, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0);
+  if (p == MAP_FAILED) {
+if (!hint) lj_trace_err(J, LJ_TRERR_MCODEAL);
+p = NULL;
+  }
+  return p;
+}
+
+static void mcode_free(jit_State *J, void *p, size_t sz)
+{
+  UNUSED(J);
+  munmap(p, sz);
+}
+
+static int mcode_setprot(void *p, size_t sz, int prot)
+{
+  return mprotect(p, sz, prot);
+}
+
+#elif LJ_64
+
+#error "Missing OS support for explicit placement of executable memory"
+
+#else
+
+/* Fallback allocator. This will fail if memory is not executable by default. 
*/
+#define LUAJIT_UNPROTECT_MCODE
+#define MCPROT_RW  0
+#define MCPROT_RX  0
+#define MCPROT_RWX 0
+
+static void *mcode_alloc_at(jit_State *J, uintptr_t hint, size_t sz, int prot)
+{
+  UNUSED(hint); UNUSED(prot);
+  return lj_mem_new(J->L, sz);
+}
+
+static void mcode_free(jit_State *J, void *p, size_t sz)
+{
+  lj_mem_free(J2G(J), p, sz);
+}
+
+#endif
+
+/* -- MCode area protection --- */
+
+/* Define this ONLY if page protection twiddling becomes a bottleneck. */
+#ifdef LUAJIT_UNPROTECT_MCODE
+
+/* It's generally considered to be a potential security risk to have
+** pages with simultaneous write *and* execute access in a process.
+**
+** Do not even think about using this mode for server processes or
+** apps handling untrusted external data (such as a browser).
+**
+** The security risk is not in LuaJIT itself -- but if an adversary finds
+** any *other* flaw in your C application logic, then any RWX memory page
+** simplifies writing an exploit considerably.
+*/
+#define MCPROT_GEN MCPROT_RWX
+#define MCPROT_RUN MCPROT_RWX
+
+static void mcode_protect(jit_State *J, int prot)
+{
+  UNUSED(J); UNUSED(prot);
+}
+
+#else
+
+/* This is the default behaviour and much safer:
+**
+** Most of the time the memory pages holding machine code are executable,
+** but NONE of them is writable.
+**
+** The current memory area is marked read-write (but NOT executable) only
+** during the short time window while the assembler generates machine code.
+*/
+#define MCPROT_GEN MCPROT_RW
+#define MCPROT_RUN MCPROT_RX
+
+/* Protection twiddling failed. Probably due to kernel security. */
+static LJ_NOINLINE void mcode_protfail(jit_State *J)
+{
+  lua_CFunction panic = J2G(J)->panic;
+  if (panic) {
+lua_

[15/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_opt_fold.c
--
diff --git a/lib/luajit/src/lj_opt_fold.c b/lib/luajit/src/lj_opt_fold.c
new file mode 100644
index 000..d00fdd5
--- /dev/null
+++ b/lib/luajit/src/lj_opt_fold.c
@@ -0,0 +1,2304 @@
+/*
+** FOLD: Constant Folding, Algebraic Simplifications and Reassociation.
+** ABCelim: Array Bounds Check Elimination.
+** CSE: Common-Subexpression Elimination.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#define lj_opt_fold_c
+#define LUA_CORE
+
+#include 
+
+#include "lj_obj.h"
+
+#if LJ_HASJIT
+
+#include "lj_str.h"
+#include "lj_tab.h"
+#include "lj_ir.h"
+#include "lj_jit.h"
+#include "lj_iropt.h"
+#include "lj_trace.h"
+#if LJ_HASFFI
+#include "lj_ctype.h"
+#endif
+#include "lj_carith.h"
+#include "lj_vm.h"
+#include "lj_strscan.h"
+
+/* Here's a short description how the FOLD engine processes instructions:
+**
+** The FOLD engine receives a single instruction stored in fins (J->fold.ins).
+** The instruction and its operands are used to select matching fold rules.
+** These are applied iteratively until a fixed point is reached.
+**
+** The 8 bit opcode of the instruction itself plus the opcodes of the
+** two instructions referenced by its operands form a 24 bit key
+** 'ins left right' (unused operands -> 0, literals -> lowest 8 bits).
+**
+** This key is used for partial matching against the fold rules. The
+** left/right operand fields of the key are successively masked with
+** the 'any' wildcard, from most specific to least specific:
+**
+**   ins left right
+**   ins any  right
+**   ins left any
+**   ins any  any
+**
+** The masked key is used to lookup a matching fold rule in a semi-perfect
+** hash table. If a matching rule is found, the related fold function is run.
+** Multiple rules can share the same fold function. A fold rule may return
+** one of several special values:
+**
+** - NEXTFOLD means no folding was applied, because an additional test
+**   inside the fold function failed. Matching continues against less
+**   specific fold rules. Finally the instruction is passed on to CSE.
+**
+** - RETRYFOLD means the instruction was modified in-place. Folding is
+**   retried as if this instruction had just been received.
+**
+** All other return values are terminal actions -- no further folding is
+** applied:
+**
+** - INTFOLD(i) returns a reference to the integer constant i.
+**
+** - LEFTFOLD and RIGHTFOLD return the left/right operand reference
+**   without emitting an instruction.
+**
+** - CSEFOLD and EMITFOLD pass the instruction directly to CSE or emit
+**   it without passing through any further optimizations.
+**
+** - FAILFOLD, DROPFOLD and CONDFOLD only apply to instructions which have
+**   no result (e.g. guarded assertions): FAILFOLD means the guard would
+**   always fail, i.e. the current trace is pointless. DROPFOLD means
+**   the guard is always true and has been eliminated. CONDFOLD is a
+**   shortcut for FAILFOLD + cond (i.e. drop if true, otherwise fail).
+**
+** - Any other return value is interpreted as an IRRef or TRef. This
+**   can be a reference to an existing or a newly created instruction.
+**   Only the least-significant 16 bits (IRRef1) are used to form a TRef
+**   which is finally returned to the caller.
+**
+** The FOLD engine receives instructions both from the trace recorder and
+** substituted instructions from LOOP unrolling. This means all types
+** of instructions may end up here, even though the recorder bypasses
+** FOLD in some cases. Thus all loads, stores and allocations must have
+** an any/any rule to avoid being passed on to CSE.
+**
+** Carefully read the following requirements before adding or modifying
+** any fold rules:
+**
+** Requirement #1: All fold rules must preserve their destination type.
+**
+** Consistently use INTFOLD() (KINT result) or lj_ir_knum() (KNUM result).
+** Never use lj_ir_knumint() which can have either a KINT or KNUM result.
+**
+** Requirement #2: Fold rules should not create *new* instructions which
+** reference operands *across* PHIs.
+**
+** E.g. a RETRYFOLD with 'fins->op1 = fleft->op1' is invalid if the
+** left operand is a PHI. Then fleft->op1 would point across the PHI
+** frontier to an invariant instruction. Adding a PHI for this instruction
+** would be counterproductive. The solution is to add a barrier which
+** prevents folding across PHIs, i.e. 'PHIBARRIER(fleft)' in this case.
+** The only exception is for recurrences with high latencies like
+** repeated int->num->int conversions.
+**
+** One could relax this condition a bit if the referenced instruction is
+** a PHI, too. But this often leads to worse code due to excessive
+** register shuffling.
+**
+** Note: returning *existing* instructions (e.g. LEFTFOLD) is ok, though.
+** Even returning fleft->op1 would be ok, because a new PHI will added,
+** if

[13/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_opt_split.c
--
diff --git a/lib/luajit/src/lj_opt_split.c b/lib/luajit/src/lj_opt_split.c
new file mode 100644
index 000..1cee509
--- /dev/null
+++ b/lib/luajit/src/lj_opt_split.c
@@ -0,0 +1,731 @@
+/*
+** SPLIT: Split 64 bit IR instructions into 32 bit IR instructions.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#define lj_opt_split_c
+#define LUA_CORE
+
+#include "lj_obj.h"
+
+#if LJ_HASJIT && (LJ_SOFTFP || (LJ_32 && LJ_HASFFI))
+
+#include "lj_err.h"
+#include "lj_str.h"
+#include "lj_ir.h"
+#include "lj_jit.h"
+#include "lj_ircall.h"
+#include "lj_iropt.h"
+#include "lj_vm.h"
+
+/* SPLIT pass:
+**
+** This pass splits up 64 bit IR instructions into multiple 32 bit IR
+** instructions. It's only active for soft-float targets or for 32 bit CPUs
+** which lack native 64 bit integer operations (the FFI is currently the
+** only emitter for 64 bit integer instructions).
+**
+** Splitting the IR in a separate pass keeps each 32 bit IR assembler
+** backend simple. Only a small amount of extra functionality needs to be
+** implemented. This is much easier than adding support for allocating
+** register pairs to each backend (believe me, I tried). A few simple, but
+** important optimizations can be performed by the SPLIT pass, which would
+** be tedious to do in the backend.
+**
+** The basic idea is to replace each 64 bit IR instruction with its 32 bit
+** equivalent plus an extra HIOP instruction. The splitted IR is not passed
+** through FOLD or any other optimizations, so each HIOP is guaranteed to
+** immediately follow it's counterpart. The actual functionality of HIOP is
+** inferred from the previous instruction.
+**
+** The operands of HIOP hold the hiword input references. The output of HIOP
+** is the hiword output reference, which is also used to hold the hiword
+** register or spill slot information. The register allocator treats this
+** instruction independently of any other instruction, which improves code
+** quality compared to using fixed register pairs.
+**
+** It's easier to split up some instructions into two regular 32 bit
+** instructions. E.g. XLOAD is split up into two XLOADs with two different
+** addresses. Obviously 64 bit constants need to be split up into two 32 bit
+** constants, too. Some hiword instructions can be entirely omitted, e.g.
+** when zero-extending a 32 bit value to 64 bits. 64 bit arguments for calls
+** are split up into two 32 bit arguments each.
+**
+** On soft-float targets, floating-point instructions are directly converted
+** to soft-float calls by the SPLIT pass (except for comparisons and MIN/MAX).
+** HIOP for number results has the type IRT_SOFTFP ("sfp" in -jdump).
+**
+** Here's the IR and x64 machine code for 'x.b = x.a + 1' for a struct with
+** two int64_t fields:
+**
+** 0100p32 ADDbase  +8
+** 0101i64 XLOAD  0100
+** 0102i64 ADD0101  +1
+** 0103p32 ADDbase  +16
+** 0104i64 XSTORE 0103  0102
+**
+** mov rax, [esi+0x8]
+** add rax, +0x01
+** mov [esi+0x10], rax
+**
+** Here's the transformed IR and the x86 machine code after the SPLIT pass:
+**
+** 0100p32 ADDbase  +8
+** 0101int XLOAD  0100
+** 0102p32 ADDbase  +12
+** 0103int XLOAD  0102
+** 0104int ADD0101  +1
+** 0105int HIOP   0103  +0
+** 0106p32 ADDbase  +16
+** 0107int XSTORE 0106  0104
+** 0108int HIOP   0106  0105
+**
+** mov eax, [esi+0x8]
+** mov ecx, [esi+0xc]
+** add eax, +0x01
+** adc ecx, +0x00
+** mov [esi+0x10], eax
+** mov [esi+0x14], ecx
+**
+** You may notice the reassociated hiword address computation, which is
+** later fused into the mov operands by the assembler.
+*/
+
+/* Some local macros to save typing. Undef'd at the end. */
+#define IR(ref)(&J->cur.ir[(ref)])
+
+/* Directly emit the transformed IR without updating chains etc. */
+static IRRef split_emit(jit_State *J, uint16_t ot, IRRef1 op1, IRRef1 op2)
+{
+  IRRef nref = lj_ir_nextins(J);
+  IRIns *ir = IR(nref);
+  ir->ot = ot;
+  ir->op1 = op1;
+  ir->op2 = op2;
+  return nref;
+}
+
+#if LJ_SOFTFP
+/* Emit a (checked) number to integer conversion. */
+static IRRef split_num2int(jit_State *J, IRRef lo, IRRef hi, int check)
+{
+  IRRef tmp, res;
+#if LJ_LE
+  tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), lo, hi);
+#else
+  tmp = split_emit(J, IRT(IR_CARG, IRT_NIL), hi, lo);
+#endif
+  res = split_emit(J, IRTI(IR_CALLN), tmp, IRCALL_softfp_d2i);
+  if (check) {
+tmp = split_emit(J, IRTI(IR_CALLN), res, IRCALL_softfp_i2d);
+split_emit(J, IRT(IR_HIOP, IRT_SOFTFP), tmp, tmp);
+split_emit(J, IRTGI(IR_EQ), tmp, lo);
+split_emit(J, IRTG(IR_HIOP, IRT_SOFTFP), tmp+1, hi);
+  }
+  return res;
+}
+
+/* Emit a CALLN with one split 64 bit argument. */
+static 

[06/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/vm_mips.dasc
--
diff --git a/lib/luajit/src/vm_mips.dasc b/lib/luajit/src/vm_mips.dasc
new file mode 100644
index 000..ac8346b
--- /dev/null
+++ b/lib/luajit/src/vm_mips.dasc
@@ -0,0 +1,4241 @@
+|// Low-level VM code for MIPS CPUs.
+|// Bytecode interpreter, fast functions and helper functions.
+|// Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+|
+|.arch mips
+|.section code_op, code_sub
+|
+|.actionlist build_actionlist
+|.globals GLOB_
+|.globalnames globnames
+|.externnames extnames
+|
+|// Note: The ragged indentation of the instructions is intentional.
+|//   The starting columns indicate data dependencies.
+|
+|//---
+|
+|// Fixed register assignments for the interpreter.
+|// Don't use: r0 = 0, r26/r27 = reserved, r28 = gp, r29 = sp, r31 = ra
+|
+|// The following must be C callee-save (but BASE is often refetched).
+|.define BASE, r16 // Base of current Lua stack frame.
+|.define KBASE,r17 // Constants of current Lua function.
+|.define PC,   r18 // Next PC.
+|.define DISPATCH, r19 // Opcode dispatch table.
+|.define LREG, r20 // Register holding lua_State (also in SAVE_L).
+|.define MULTRES,  r21 // Size of multi-result: (nresults+1)*8.
+|// NYI: r22 currently unused.
+|
+|.define JGL,  r30 // On-trace: global_State + 32768.
+|
+|// Constants for type-comparisons, stores and conversions. C callee-save.
+|.define TISNIL,   r30
+|.define TOBIT,f30 // 2^52 + 2^51.
+|
+|// The following temporaries are not saved across C calls, except for RA.
+|.define RA,   r23 // Callee-save.
+|.define RB,   r8
+|.define RC,   r9
+|.define RD,   r10
+|.define INS,  r11
+|
+|.define AT,   r1  // Assembler temporary.
+|.define TMP0, r12
+|.define TMP1, r13
+|.define TMP2, r14
+|.define TMP3, r15
+|
+|// Calling conventions.
+|.define CFUNCADDR,r25
+|.define CARG1,r4
+|.define CARG2,r5
+|.define CARG3,r6
+|.define CARG4,r7
+|
+|.define CRET1,r2
+|.define CRET2,r3
+|
+|.define FARG1,f12
+|.define FARG2,f14
+|
+|.define FRET1,f0
+|.define FRET2,f2
+|
+|// Stack layout while in interpreter. Must match with lj_frame.h.
+|.define CFRAME_SPACE, 112 // Delta for sp.
+|
+|.define SAVE_ERRF,124(sp) // 32 bit C frame info.
+|.define SAVE_NRES,120(sp)
+|.define SAVE_CFRAME,  116(sp)
+|.define SAVE_L,   112(sp)
+|//- 8 byte aligned,  16 byte register save area, owned by interpreter.
+|.define SAVE_GPR_,72  // .. 72+10*4: 32 bit GPR saves.
+|.define SAVE_FPR_,24  // .. 24+6*8: 64 bit FPR saves.
+|.define SAVE_PC,  20(sp)
+|.define ARG5, 16(sp)
+|.define CSAVE_4,  12(sp)
+|.define CSAVE_3,  8(sp)
+|.define CSAVE_2,  4(sp)
+|.define CSAVE_1,  0(sp)
+|//- 8 byte aligned,  16 byte register save area, owned by callee.
+|
+|.define ARG5_OFS, 16
+|.define SAVE_MULTRES, ARG5
+|
+|.macro saveregs
+|  addiu sp, sp, -CFRAME_SPACE
+|  sw ra, SAVE_GPR_+9*4(sp)
+|  sw r30, SAVE_GPR_+8*4(sp)
+|   sdc1 f30, SAVE_FPR_+5*8(sp)
+|  sw r23, SAVE_GPR_+7*4(sp)
+|  sw r22, SAVE_GPR_+6*4(sp)
+|   sdc1 f28, SAVE_FPR_+4*8(sp)
+|  sw r21, SAVE_GPR_+5*4(sp)
+|  sw r20, SAVE_GPR_+4*4(sp)
+|   sdc1 f26, SAVE_FPR_+3*8(sp)
+|  sw r19, SAVE_GPR_+3*4(sp)
+|  sw r18, SAVE_GPR_+2*4(sp)
+|   sdc1 f24, SAVE_FPR_+2*8(sp)
+|  sw r17, SAVE_GPR_+1*4(sp)
+|  sw r16, SAVE_GPR_+0*4(sp)
+|   sdc1 f22, SAVE_FPR_+1*8(sp)
+|   sdc1 f20, SAVE_FPR_+0*8(sp)
+|.endmacro
+|
+|.macro restoreregs_ret
+|  lw ra, SAVE_GPR_+9*4(sp)
+|  lw r30, SAVE_GPR_+8*4(sp)
+|   ldc1 f30, SAVE_FPR_+5*8(sp)
+|  lw r23, SAVE_GPR_+7*4(sp)
+|  lw r22, SAVE_GPR_+6*4(sp)
+|   ldc1 f28, SAVE_FPR_+4*8(sp)
+|  lw r21, SAVE_GPR_+5*4(sp)
+|  lw r20, SAVE_GPR_+4*4(sp)
+|   ldc1 f26, SAVE_FPR_+3*8(sp)
+|  lw r19, SAVE_GPR_+3*4(sp)
+|  lw r18, SAVE_GPR_+2*4(sp)
+|   ldc1 f24, SAVE_FPR_+2*8(sp)
+|  lw r17, SAVE_GPR_+1*4(sp)
+|  lw r16, SAVE_GPR_+0*4(sp)
+|   ldc1 f22, SAVE_FPR_+1*8(sp)
+|   ldc1 f20, SAVE_FPR_+0*8(sp)
+|  jr ra
+|  addiu sp, sp, CFRAME_SPACE
+|.endmacro
+|
+|// Type definitions. Some of these are only used for documentation.
+|.type L,  lua_State,  LREG
+|.type GL, global_State
+|.type TVALUE, TValue
+|.type GCOBJ,  GCobj
+|.type STR,GCstr
+|.type TAB,GCtab
+|.type LFUNC,  GCfuncL
+|.type CFUNC,  GCfuncC
+|.type PROTO,  GCproto
+|.type UPVAL,  GCupval
+|.type NODE,   Node
+|.type NARGS8, int
+|.type TRACE, 

[07/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/vm_arm.dasc
--
diff --git a/lib/luajit/src/vm_arm.dasc b/lib/luajit/src/vm_arm.dasc
new file mode 100644
index 000..457efa6
--- /dev/null
+++ b/lib/luajit/src/vm_arm.dasc
@@ -0,0 +1,4486 @@
+|// Low-level VM code for ARM CPUs.
+|// Bytecode interpreter, fast functions and helper functions.
+|// Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+|
+|.arch arm
+|.section code_op, code_sub
+|
+|.actionlist build_actionlist
+|.globals GLOB_
+|.globalnames globnames
+|.externnames extnames
+|
+|// Note: The ragged indentation of the instructions is intentional.
+|//   The starting columns indicate data dependencies.
+|
+|//---
+|
+|// Fixed register assignments for the interpreter.
+|
+|// The following must be C callee-save.
+|.define MASKR8,   r4  // 255*8 constant for fast bytecode decoding.
+|.define KBASE,r5  // Constants of current Lua function.
+|.define PC,   r6  // Next PC.
+|.define DISPATCH, r7  // Opcode dispatch table.
+|.define LREG, r8  // Register holding lua_State (also in SAVE_L).
+|
+|// C callee-save in EABI, but often refetched. Temporary in iOS 3.0+.
+|.define BASE, r9  // Base of current Lua stack frame.
+|
+|// The following temporaries are not saved across C calls, except for RA/RC.
+|.define RA,   r10 // Callee-save.
+|.define RC,   r11 // Callee-save.
+|.define RB,   r12
+|.define OP,   r12 // Overlaps RB, must not be lr.
+|.define INS,  lr
+|
+|// Calling conventions. Also used as temporaries.
+|.define CARG1,r0
+|.define CARG2,r1
+|.define CARG3,r2
+|.define CARG4,r3
+|.define CARG12,   r0  // For 1st soft-fp double.
+|.define CARG34,   r2  // For 2nd soft-fp double.
+|
+|.define CRET1,r0
+|.define CRET2,r1
+|
+|// Stack layout while in interpreter. Must match with lj_frame.h.
+|.define SAVE_R4,  [sp, #28]
+|.define CFRAME_SPACE, #28
+|.define SAVE_ERRF,[sp, #24]
+|.define SAVE_NRES,[sp, #20]
+|.define SAVE_CFRAME,  [sp, #16]
+|.define SAVE_L,   [sp, #12]
+|.define SAVE_PC,  [sp, #8]
+|.define SAVE_MULTRES, [sp, #4]
+|.define ARG5, [sp]
+|
+|.define TMPDhi,   [sp, #4]
+|.define TMPDlo,   [sp]
+|.define TMPD, [sp]
+|.define TMPDp,sp
+|
+|.if FPU
+|.macro saveregs
+|  push {r5, r6, r7, r8, r9, r10, r11, lr}
+|  vpush {d8-d15}
+|  sub sp, sp, CFRAME_SPACE+4
+|  str r4, SAVE_R4
+|.endmacro
+|.macro restoreregs_ret
+|  ldr r4, SAVE_R4
+|  add sp, sp, CFRAME_SPACE+4
+|  vpop {d8-d15}
+|  pop {r5, r6, r7, r8, r9, r10, r11, pc}
+|.endmacro
+|.else
+|.macro saveregs
+|  push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
+|  sub sp, sp, CFRAME_SPACE
+|.endmacro
+|.macro restoreregs_ret
+|  add sp, sp, CFRAME_SPACE
+|  pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
+|.endmacro
+|.endif
+|
+|// Type definitions. Some of these are only used for documentation.
+|.type L,  lua_State,  LREG
+|.type GL, global_State
+|.type TVALUE, TValue
+|.type GCOBJ,  GCobj
+|.type STR,GCstr
+|.type TAB,GCtab
+|.type LFUNC,  GCfuncL
+|.type CFUNC,  GCfuncC
+|.type PROTO,  GCproto
+|.type UPVAL,  GCupval
+|.type NODE,   Node
+|.type NARGS8, int
+|.type TRACE,  GCtrace
+|
+|//---
+|
+|// Trap for not-yet-implemented parts.
+|.macro NYI; ud; .endmacro
+|
+|//---
+|
+|// Access to frame relative to BASE.
+|.define FRAME_FUNC,   #-8
+|.define FRAME_PC, #-4
+|
+|.macro decode_RA8, dst, ins; and dst, MASKR8, ins, lsr #5; .endmacro
+|.macro decode_RB8, dst, ins; and dst, MASKR8, ins, lsr #21; .endmacro
+|.macro decode_RC8, dst, ins; and dst, MASKR8, ins, lsr #13; .endmacro
+|.macro decode_RD, dst, ins; lsr dst, ins, #16; .endmacro
+|.macro decode_OP, dst, ins; and dst, ins, #255; .endmacro
+|
+|// Instruction fetch.
+|.macro ins_NEXT1
+|  ldrb OP, [PC]
+|.endmacro
+|.macro ins_NEXT2
+|   ldr INS, [PC], #4
+|.endmacro
+|// Instruction decode+dispatch.
+|.macro ins_NEXT3
+|  ldr OP, [DISPATCH, OP, lsl #2]
+|   decode_RA8 RA, INS
+|   decode_RD RC, INS
+|  bx OP
+|.endmacro
+|.macro ins_NEXT
+|  ins_NEXT1
+|  ins_NEXT2
+|  ins_NEXT3
+|.endmacro
+|
+|// Instruction footer.
+|.if 1
+|  // Replicated dispatch. Less unpredictable branches, but higher I-Cache use.
+|  .define ins_next, ins_NEXT
+|  .define ins_next_, ins_NEXT
+|  .define ins_next1, ins_NEXT1
+|  .define ins_next2, ins_NEXT2
+|  .define ins_next3, ins_NEXT3
+|.else
+|  // Common dispat

[36/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/host/buildvm.h
--
diff --git a/lib/luajit/src/host/buildvm.h b/lib/luajit/src/host/buildvm.h
new file mode 100644
index 000..b262185
--- /dev/null
+++ b/lib/luajit/src/host/buildvm.h
@@ -0,0 +1,104 @@
+/*
+** LuaJIT VM builder.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#ifndef _BUILDVM_H
+#define _BUILDVM_H
+
+#include 
+#include 
+#include 
+#include 
+#include 
+
+#include "lj_def.h"
+#include "lj_arch.h"
+
+/* Hardcoded limits. Increase as needed. */
+#define BUILD_MAX_RELOC200 /* Max. number of relocations. 
*/
+#define BUILD_MAX_FOLD 4096/* Max. number of fold rules. */
+
+/* Prefix for scanned library definitions. */
+#define LIBDEF_PREFIX  "LJLIB_"
+
+/* Prefix for scanned fold definitions. */
+#define FOLDDEF_PREFIX "LJFOLD"
+
+/* Prefixes for generated labels. */
+#define LABEL_PREFIX   "lj_"
+#define LABEL_PREFIX_BCLABEL_PREFIX "BC_"
+#define LABEL_PREFIX_FFLABEL_PREFIX "ff_"
+#define LABEL_PREFIX_CFLABEL_PREFIX "cf_"
+#define LABEL_PREFIX_FFH   LABEL_PREFIX "ffh_"
+#define LABEL_PREFIX_LIBCF LABEL_PREFIX "lib_cf_"
+#define LABEL_PREFIX_LIBINIT   LABEL_PREFIX "lib_init_"
+
+/* Forward declaration. */
+struct dasm_State;
+
+/* Build modes. */
+#define BUILDDEF(_) \
+  _(elfasm) _(coffasm) _(machasm) _(peobj) _(raw) \
+  _(bcdef) _(ffdef) _(libdef) _(recdef) _(vmdef) \
+  _(folddef)
+
+typedef enum {
+#define BUILDENUM(name)BUILD_##name,
+BUILDDEF(BUILDENUM)
+#undef BUILDENUM
+  BUILD__MAX
+} BuildMode;
+
+/* Code relocation. */
+typedef struct BuildReloc {
+  int32_t ofs;
+  int sym;
+  int type;
+} BuildReloc;
+
+typedef struct BuildSym {
+  const char *name;
+  int32_t ofs;
+} BuildSym;
+
+/* Build context structure. */
+typedef struct BuildCtx {
+  /* DynASM state pointer. Should be first member. */
+  struct dasm_State *D;
+  /* Parsed command line. */
+  BuildMode mode;
+  FILE *fp;
+  const char *outname;
+  char **args;
+  /* Code and symbols generated by DynASM. */
+  uint8_t *code;
+  size_t codesz;
+  int npc, nglob, nsym, nreloc, nrelocsym;
+  void **glob;
+  BuildSym *sym;
+  const char **relocsym;
+  int32_t *bc_ofs;
+  const char *beginsym;
+  /* Strings generated by DynASM. */
+  const char *const *globnames;
+  const char *dasm_ident;
+  const char *dasm_arch;
+  /* Relocations. */
+  BuildReloc reloc[BUILD_MAX_RELOC];
+} BuildCtx;
+
+extern void owrite(BuildCtx *ctx, const void *ptr, size_t sz);
+extern void emit_asm(BuildCtx *ctx);
+extern void emit_peobj(BuildCtx *ctx);
+extern void emit_lib(BuildCtx *ctx);
+extern void emit_fold(BuildCtx *ctx);
+
+extern const char *const bc_names[];
+extern const char *const ir_names[];
+extern const char *const irt_names[];
+extern const char *const irfpm_names[];
+extern const char *const irfield_names[];
+extern const char *const ircall_names[];
+
+#endif

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/host/buildvm_asm.c
--
diff --git a/lib/luajit/src/host/buildvm_asm.c 
b/lib/luajit/src/host/buildvm_asm.c
new file mode 100644
index 000..2c9a2d4
--- /dev/null
+++ b/lib/luajit/src/host/buildvm_asm.c
@@ -0,0 +1,313 @@
+/*
+** LuaJIT VM builder: Assembler source code emitter.
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#include "buildvm.h"
+#include "lj_bc.h"
+
+/*  */
+
+#if LJ_TARGET_X86ORX64
+/* Emit bytes piecewise as assembler text. */
+static void emit_asm_bytes(BuildCtx *ctx, uint8_t *p, int n)
+{
+  int i;
+  for (i = 0; i < n; i++) {
+if ((i & 15) == 0)
+  fprintf(ctx->fp, "\t.byte %d", p[i]);
+else
+  fprintf(ctx->fp, ",%d", p[i]);
+if ((i & 15) == 15) putc('\n', ctx->fp);
+  }
+  if ((n & 15) != 0) putc('\n', ctx->fp);
+}
+
+/* Emit relocation */
+static void emit_asm_reloc(BuildCtx *ctx, int type, const char *sym)
+{
+  switch (ctx->mode) {
+  case BUILD_elfasm:
+if (type)
+  fprintf(ctx->fp, "\t.long %s-.-4\n", sym);
+else
+  fprintf(ctx->fp, "\t.long %s\n", sym);
+break;
+  case BUILD_coffasm:
+fprintf(ctx->fp, "\t.def %s; .scl 3; .type 32; .endef\n", sym);
+if (type)
+  fprintf(ctx->fp, "\t.long %s-.-4\n", sym);
+else
+  fprintf(ctx->fp, "\t.long %s\n", sym);
+break;
+  default:  /* BUILD_machasm for relative relocations handled below. */
+fprintf(ctx->fp, "\t.long %s\n", sym);
+break;
+  }
+}
+
+static const char *const jccnames[] = {
+  "jo", "jno", "jb", "jnb", "jz", "jnz", "jbe", "ja",
+  "js", "jns", "jpe", "jpo", "jl", "jge", "jle", "jg"
+};
+
+/* Emit relocation for the incredibly stupid OSX assembler. */
+static void emit_asm_r

[29/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/src/lj_asm.c
--
diff --git a/lib/luajit/src/lj_asm.c b/lib/luajit/src/lj_asm.c
new file mode 100644
index 000..804b4dc
--- /dev/null
+++ b/lib/luajit/src/lj_asm.c
@@ -0,0 +1,1920 @@
+/*
+** IR assembler (SSA IR -> machine code).
+** Copyright (C) 2005-2015 Mike Pall. See Copyright Notice in luajit.h
+*/
+
+#define lj_asm_c
+#define LUA_CORE
+
+#include "lj_obj.h"
+
+#if LJ_HASJIT
+
+#include "lj_gc.h"
+#include "lj_str.h"
+#include "lj_tab.h"
+#include "lj_frame.h"
+#if LJ_HASFFI
+#include "lj_ctype.h"
+#endif
+#include "lj_ir.h"
+#include "lj_jit.h"
+#include "lj_ircall.h"
+#include "lj_iropt.h"
+#include "lj_mcode.h"
+#include "lj_iropt.h"
+#include "lj_trace.h"
+#include "lj_snap.h"
+#include "lj_asm.h"
+#include "lj_dispatch.h"
+#include "lj_vm.h"
+#include "lj_target.h"
+
+#ifdef LUA_USE_ASSERT
+#include 
+#endif
+
+/* -- Assembler state and common macros --- */
+
+/* Assembler state. */
+typedef struct ASMState {
+  RegCost cost[RID_MAX];  /* Reference and blended allocation cost for regs. */
+
+  MCode *mcp;  /* Current MCode pointer (grows down). */
+  MCode *mclim;/* Lower limit for MCode memory + red zone. */
+#ifdef LUA_USE_ASSERT
+  MCode *mcp_prev; /* Red zone overflow check. */
+#endif
+
+  IRIns *ir;   /* Copy of pointer to IR instructions/constants. */
+  jit_State *J;/* JIT compiler state. */
+
+#if LJ_TARGET_X86ORX64
+  x86ModRM mrm;/* Fused x86 address operand. */
+#endif
+
+  RegSet freeset;  /* Set of free registers. */
+  RegSet modset;   /* Set of registers modified inside the loop. */
+  RegSet weakset;  /* Set of weakly referenced registers. */
+  RegSet phiset;   /* Set of PHI registers. */
+
+  uint32_t flags;  /* Copy of JIT compiler flags. */
+  int loopinv; /* Loop branch inversion (0:no, 1:yes, 2:yes+CC_P). */
+
+  int32_t evenspill;   /* Next even spill slot. */
+  int32_t oddspill;/* Next odd spill slot (or 0). */
+
+  IRRef curins;/* Reference of current instruction. */
+  IRRef stopins;   /* Stop assembly before hitting this instruction. */
+  IRRef orignins;  /* Original T->nins. */
+
+  IRRef snapref;   /* Current snapshot is active after this reference. */
+  IRRef snaprename;/* Rename highwater mark for snapshot check. */
+  SnapNo snapno;   /* Current snapshot number. */
+  SnapNo loopsnapno;   /* Loop snapshot number. */
+
+  IRRef fuseref;   /* Fusion limit (loopref, 0 or FUSE_DISABLED). */
+  IRRef sectref;   /* Section base reference (loopref or 0). */
+  IRRef loopref;   /* Reference of LOOP instruction (or 0). */
+
+  BCReg topslot;   /* Number of slots for stack check (unless 0). */
+  int32_t gcsteps; /* Accumulated number of GC steps (per section). */
+
+  GCtrace *T;  /* Trace to assemble. */
+  GCtrace *parent; /* Parent trace (or NULL). */
+
+  MCode *mcbot;/* Bottom of reserved MCode. */
+  MCode *mctop;/* Top of generated MCode. */
+  MCode *mcloop;   /* Pointer to loop MCode (or NULL). */
+  MCode *invmcp;   /* Points to invertible loop branch (or NULL). */
+  MCode *flagmcp;  /* Pending opportunity to merge flag setting ins. */
+  MCode *realign;  /* Realign loop if not NULL. */
+
+#ifdef RID_NUM_KREF
+  int32_t krefk[RID_NUM_KREF];
+#endif
+  IRRef1 phireg[RID_MAX];  /* PHI register references. */
+  uint16_t parentmap[LJ_MAX_JSLOTS];  /* Parent instruction to RegSP map. */
+} ASMState;
+
+#define IR(ref)(&as->ir[(ref)])
+
+#define ASMREF_TMP1REF_TRUE/* Temp. register. */
+#define ASMREF_TMP2REF_FALSE   /* Temp. register. */
+#define ASMREF_L   REF_NIL /* Stores register for L. */
+
+/* Check for variant to invariant references. */
+#define iscrossref(as, ref)((ref) < as->sectref)
+
+/* Inhibit memory op fusion from variant to invariant references. */
+#define FUSE_DISABLED  (~(IRRef)0)
+#define mayfuse(as, ref)   ((ref) > as->fuseref)
+#define neverfuse(as)  (as->fuseref == FUSE_DISABLED)
+#define canfuse(as, ir)(!neverfuse(as) && !irt_isphi((ir)->t))
+#define opisfusableload(o) \
+  ((o) == IR_ALOAD || (o) == IR_HLOAD || (o) == IR_ULOAD || \
+   (o) == IR_FLOAD || (o) == IR_XLOAD || (o) == IR_SLOAD || (o) == IR_VLOAD)
+
+/* Sparse limit checks using a red zone before the actual limit. */
+#define MCLIM_REDZONE  64
+
+static LJ_NORET LJ_NOINLINE void asm_mclimit(ASMState *as)
+{
+  lj_mcode_limiterr(as->J, (size_t)(as->mctop - as->mcp + 4*MCLIM_REDZONE));
+}
+
+static LJ_AINLINE void checkmclim(ASMState *as)
+{
+#ifdef LUA_USE_ASSERT
+  if (as->mcp + MCLIM_REDZONE < as->mcp_prev) {
+IRIns *ir = IR(as->curins+1);
+fprintf(stderr, "RED

[37/43] trafficserver git commit: TS-3783 TS-3030 Add luajit v2.0.4 as a subtree

2015-07-23 Thread zwoop
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1f27b840/lib/luajit/dynasm/dynasm.lua
--
diff --git a/lib/luajit/dynasm/dynasm.lua b/lib/luajit/dynasm/dynasm.lua
new file mode 100644
index 000..fffda75
--- /dev/null
+++ b/lib/luajit/dynasm/dynasm.lua
@@ -0,0 +1,1094 @@
+--
+-- DynASM. A dynamic assembler for code generation engines.
+-- Originally designed and implemented for LuaJIT.
+--
+-- Copyright (C) 2005-2015 Mike Pall. All rights reserved.
+-- See below for full copyright notice.
+--
+
+-- Application information.
+local _info = {
+  name =   "DynASM",
+  description ="A dynamic assembler for code generation engines",
+  version ="1.3.0",
+  vernum =  10300,
+  release ="2011-05-05",
+  author = "Mike Pall",
+  url ="http://luajit.org/dynasm.html";,
+  license ="MIT",
+  copyright =  [[
+Copyright (C) 2005-2015 Mike Pall. All rights reserved.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+[ MIT license: http://www.opensource.org/licenses/mit-license.php ]
+]],
+}
+
+-- Cache library functions.
+local type, pairs, ipairs = type, pairs, ipairs
+local pcall, error, assert = pcall, error, assert
+local _s = string
+local sub, match, gmatch, gsub = _s.sub, _s.match, _s.gmatch, _s.gsub
+local format, rep, upper = _s.format, _s.rep, _s.upper
+local _t = table
+local insert, remove, concat, sort = _t.insert, _t.remove, _t.concat, _t.sort
+local exit = os.exit
+local io = io
+local stdin, stdout, stderr = io.stdin, io.stdout, io.stderr
+
+--
+
+-- Program options.
+local g_opt = {}
+
+-- Global state for current file.
+local g_fname, g_curline, g_indent, g_lineno, g_synclineno, g_arch
+local g_errcount = 0
+
+-- Write buffer for output file.
+local g_wbuffer, g_capbuffer
+
+--
+
+-- Write an output line (or callback function) to the buffer.
+local function wline(line, needindent)
+  local buf = g_capbuffer or g_wbuffer
+  buf[#buf+1] = needindent and g_indent..line or line
+  g_synclineno = g_synclineno + 1
+end
+
+-- Write assembler line as a comment, if requestd.
+local function wcomment(aline)
+  if g_opt.comment then
+wline(g_opt.comment..aline..g_opt.endcomment, true)
+  end
+end
+
+-- Resync CPP line numbers.
+local function wsync()
+  if g_synclineno ~= g_lineno and g_opt.cpp then
+wline("#line "..g_lineno..' "'..g_fname..'"')
+g_synclineno = g_lineno
+  end
+end
+
+-- Dummy action flush function. Replaced with arch-specific function later.
+local function wflush(term)
+end
+
+-- Dump all buffered output lines.
+local function wdumplines(out, buf)
+  for _,line in ipairs(buf) do
+if type(line) == "string" then
+  assert(out:write(line, "\n"))
+else
+  -- Special callback to dynamically insert lines after end of processing.
+  line(out)
+end
+  end
+end
+
+--
+
+-- Emit an error. Processing continues with next statement.
+local function werror(msg)
+  error(format("%s:%s: error: %s:\n%s", g_fname, g_lineno, msg, g_curline), 0)
+end
+
+-- Emit a fatal error. Processing stops.
+local function wfatal(msg)
+  g_errcount = "fatal"
+  werror(msg)
+end
+
+-- Print a warning. Processing continues.
+local function wwarn(msg)
+  stderr:write(format("%s:%s: warning: %s:\n%s\n",
+g_fname, g_lineno, msg, g_curline))
+end
+
+-- Print caught error message. But suppress excessive errors.
+local function wprinterr(...)
+  if type(g_errcount) == "number" then
+-- Regular error.
+g_errcount = g_errcount + 1
+if g_errcount < 21 then -- Seems to be a reasonable limit.
+  stderr:write(...)

trafficserver git commit: TS-3793: Check the incoming header request length for HTTP/2 requests

2015-07-23 Thread bcall
Repository: trafficserver
Updated Branches:
  refs/heads/master 1f27b8407 -> 1cb87d281


TS-3793: Check the incoming header request length for HTTP/2 requests


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/1cb87d28
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/1cb87d28
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/1cb87d28

Branch: refs/heads/master
Commit: 1cb87d281fef19c4e4e0a97c071fb0bcdad84365
Parents: 1f27b84
Author: Bryan Call 
Authored: Thu Jul 23 19:42:25 2015 +0200
Committer: Bryan Call 
Committed: Thu Jul 23 19:45:53 2015 +0200

--
 proxy/http2/HTTP2.cc|  2 ++
 proxy/http2/HTTP2.h |  1 +
 proxy/http2/Http2ConnectionState.cc | 14 ++
 proxy/http2/Http2ConnectionState.h  |  3 +++
 4 files changed, 20 insertions(+)
--


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1cb87d28/proxy/http2/HTTP2.cc
--
diff --git a/proxy/http2/HTTP2.cc b/proxy/http2/HTTP2.cc
index e7db7cb..6681308 100644
--- a/proxy/http2/HTTP2.cc
+++ b/proxy/http2/HTTP2.cc
@@ -762,6 +762,7 @@ uint32_t Http2::initial_window_size = 1048576;
 uint32_t Http2::max_frame_size = 16384;
 uint32_t Http2::header_table_size = 4096;
 uint32_t Http2::max_header_list_size = 4294967295;
+uint32_t Http2::max_request_header_size = 131072;
 
 void
 Http2::init()
@@ -771,6 +772,7 @@ Http2::init()
   REC_EstablishStaticConfigInt32U(max_frame_size, 
"proxy.config.http2.max_frame_size");
   REC_EstablishStaticConfigInt32U(header_table_size, 
"proxy.config.http2.header_table_size");
   REC_EstablishStaticConfigInt32U(max_header_list_size, 
"proxy.config.http2.max_header_list_size");
+  REC_EstablishStaticConfigInt32U(max_request_header_size, 
"proxy.config.http.request_header_max_size");
 
   // Setup statistics
   http2_rsb = RecAllocateRawStatBlock(static_cast(HTTP2_N_STATS));

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1cb87d28/proxy/http2/HTTP2.h
--
diff --git a/proxy/http2/HTTP2.h b/proxy/http2/HTTP2.h
index bdaf6f2..a577a15 100644
--- a/proxy/http2/HTTP2.h
+++ b/proxy/http2/HTTP2.h
@@ -314,6 +314,7 @@ public:
   static uint32_t max_frame_size;
   static uint32_t header_table_size;
   static uint32_t max_header_list_size;
+  static uint32_t max_request_header_size;
 
   static void init();
 };

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1cb87d28/proxy/http2/Http2ConnectionState.cc
--
diff --git a/proxy/http2/Http2ConnectionState.cc 
b/proxy/http2/Http2ConnectionState.cc
index c45ee32..eb24735 100644
--- a/proxy/http2/Http2ConnectionState.cc
+++ b/proxy/http2/Http2ConnectionState.cc
@@ -169,6 +169,13 @@ rcv_headers_frame(Http2ClientSession &cs, 
Http2ConnectionState &cstate, const Ht
 return HTTP2_ERROR_PROTOCOL_ERROR;
   }
 
+  // keep track of how many bytes we get in the frame
+  stream->request_header_length += payload_length;
+  if (stream->request_header_length > Http2::max_request_header_size) {
+Error("HTTP/2 payload for headers exceeded: %u", 
stream->request_header_length);
+return HTTP2_ERROR_PROTOCOL_ERROR;
+  }
+
   // A receiver MUST treat the receipt of any other type of frame or
   // a frame on a different stream as a connection error of type 
PROTOCOL_ERROR.
   if (cstate.get_continued_id() != 0) {
@@ -540,6 +547,13 @@ rcv_continuation_frame(Http2ClientSession &cs, 
Http2ConnectionState &cstate, con
 unsigned read_bytes = read_rcv_buffer(buf + remaining_bytes, sizeof(buf) - 
remaining_bytes, nbytes, frame);
 IOVec header_block_fragment = make_iovec(buf, read_bytes + 
remaining_bytes);
 
+// keep track of how many bytes we get in the frame
+stream->request_header_length += frame.header().length;
+if (stream->request_header_length > Http2::max_request_header_size) {
+  Error("HTTP/2 payload for headers exceeded: %u", 
stream->request_header_length);
+  return HTTP2_ERROR_PROTOCOL_ERROR;
+}
+
 bool cont = nbytes < frame.header().length || !(frame.header().flags & 
HTTP2_FLAGS_HEADERS_END_HEADERS);
 int64_t decoded_bytes = 
stream->decode_request_header(header_block_fragment, 
*cstate.local_dynamic_table, cont);
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/1cb87d28/proxy/http2/Http2ConnectionState.h
--
diff --git a/proxy/http2/Http2ConnectionState.h 
b/proxy/http2/Http2ConnectionState.h
index 9c05ab4..42f05f4 100644
--- a/proxy/http2/Http2ConnectionState.h
+++ b/proxy/http2/Http2ConnectionState.h
@@ -106,6 +106,7 @@ public:
 HTTP2_INCREMENT_THREAD_DYN_STAT(HTTP2_S

trafficserver git commit: [TS-3794]: Enhance post SSL handshake read race condition for SPDY and H2 scenarios.

2015-07-23 Thread sudheerv
Repository: trafficserver
Updated Branches:
  refs/heads/master 1cb87d281 -> 3838cf2c1


[TS-3794]: Enhance post SSL handshake read race condition for SPDY and H2 
scenarios.


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/3838cf2c
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/3838cf2c
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/3838cf2c

Branch: refs/heads/master
Commit: 3838cf2c1033eb5c4b37170e4903c294610bcaed
Parents: 1cb87d2
Author: Sudheer Vinukonda 
Authored: Thu Jul 23 19:15:40 2015 +
Committer: Sudheer Vinukonda 
Committed: Thu Jul 23 19:53:23 2015 +

--
 iocore/net/SSLNetVConnection.cc   |  2 +-
 proxy/http/HttpSM.cc  |  2 +-
 proxy/http2/Http2ClientSession.cc |  7 +++
 proxy/http2/Http2SessionAccept.cc | 10 +-
 proxy/spdy/SpdyClientSession.cc   |  7 ++-
 proxy/spdy/SpdySessionAccept.cc   | 10 +-
 6 files changed, 33 insertions(+), 5 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3838cf2c/iocore/net/SSLNetVConnection.cc
--
diff --git a/iocore/net/SSLNetVConnection.cc b/iocore/net/SSLNetVConnection.cc
index ed04ed3..5e2b0ef 100644
--- a/iocore/net/SSLNetVConnection.cc
+++ b/iocore/net/SSLNetVConnection.cc
@@ -488,7 +488,7 @@ SSLNetVConnection::net_read_io(NetHandler *nh, EThread 
*lthread)
 if (ret == EVENT_ERROR) {
   this->read.triggered = 0;
   readSignalError(nh, err);
-} else if (ret == SSL_HANDSHAKE_WANT_READ || ret == 
SSL_HANDSHAKE_WANT_ACCEPT || ret == EVENT_CONT) {
+} else if (ret == SSL_HANDSHAKE_WANT_READ || ret == 
SSL_HANDSHAKE_WANT_ACCEPT) {
   if (SSLConfigParams::ssl_handshake_timeout_in > 0) {
 double handshake_time = ((double)(Thread::get_hrtime() - 
sslHandshakeBeginTime) / 10);
 Debug("ssl", "ssl handshake for vc %p, took %.3f seconds, configured 
handshake_timer: %d", this, handshake_time,

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3838cf2c/proxy/http/HttpSM.cc
--
diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index 3f4dd72..4ac8d4a 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -614,7 +614,7 @@ HttpSM::state_read_client_request_header(int event, void 
*data)
   //   time we've been called.  The timeout had been set to
   //   the accept timeout by the HttpClientSession
   //
-  if (client_request_hdr_bytes == 0) {
+  if ((ua_buffer_reader->read_avail() > 0) && (client_request_hdr_bytes == 0)) 
{
 milestones[TS_MILESTONE_UA_FIRST_READ] = Thread::get_hrtime();
 
ua_session->get_netvc()->set_inactivity_timeout(HRTIME_SECONDS(t_state.txn_conf->transaction_no_activity_timeout_in));
   }

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3838cf2c/proxy/http2/Http2ClientSession.cc
--
diff --git a/proxy/http2/Http2ClientSession.cc 
b/proxy/http2/Http2ClientSession.cc
index 4e3b85e..0ea6fca 100644
--- a/proxy/http2/Http2ClientSession.cc
+++ b/proxy/http2/Http2ClientSession.cc
@@ -195,6 +195,13 @@ Http2ClientSession::do_io_close(int alerrno)
   DebugHttp2Ssn0("session closed");
 
   ink_assert(this->mutex->thread_holding == this_ethread());
+  if (client_vc) {
+// clean up ssl's first byte iobuf
+SSLNetVConnection *ssl_vc = dynamic_cast(client_vc);
+if (ssl_vc) {
+  ssl_vc->set_ssl_iobuf(NULL);
+}
+  }
   HTTP2_DECREMENT_THREAD_DYN_STAT(HTTP2_STAT_CURRENT_CLIENT_SESSION_COUNT, 
this->mutex->thread_holding);
   send_connection_event(&this->connection_state, HTTP2_SESSION_EVENT_FINI, 
this);
   do_api_callout(TS_HTTP_SSN_CLOSE_HOOK);

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3838cf2c/proxy/http2/Http2SessionAccept.cc
--
diff --git a/proxy/http2/Http2SessionAccept.cc 
b/proxy/http2/Http2SessionAccept.cc
index fbb25db..ca3139f 100644
--- a/proxy/http2/Http2SessionAccept.cc
+++ b/proxy/http2/Http2SessionAccept.cc
@@ -65,7 +65,15 @@ Http2SessionAccept::mainEvent(int event, void *data)
   ink_release_assert((event == NET_EVENT_ACCEPT) ? (data != 0) : (1));
 
   if (event == NET_EVENT_ACCEPT) {
-this->accept(static_cast(data), NULL, NULL);
+NetVConnection *netvc = static_cast(data);
+SSLNetVConnection *ssl_vc = dynamic_cast(netvc);
+MIOBuffer *iobuf = NULL;
+IOBufferReader *reader = NULL;
+if (ssl_vc) {
+  iobuf = ssl_vc->get_ssl_iobuf();
+  reader = ssl_vc->get_ssl_reader();
+}
+this->accept(static_cast(data), iobuf, reader);
 return EVENT_CONT;
   }
 

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/3

trafficserver git commit: TS-3774: Fix memory leak issue in host file parsing for HostDB.

2015-07-23 Thread amc
Repository: trafficserver
Updated Branches:
  refs/heads/master 3838cf2c1 -> c36204d5a


TS-3774: Fix memory leak issue in host file parsing for HostDB.


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/c36204d5
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/c36204d5
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/c36204d5

Branch: refs/heads/master
Commit: c36204d5abaf3d4c335dd885ace1e5d58b57d451
Parents: 3838cf2
Author: Alan M. Carroll 
Authored: Tue Jul 21 11:10:05 2015 -0500
Committer: Alan M. Carroll 
Committed: Thu Jul 23 15:43:50 2015 -0500

--
 iocore/hostdb/HostDB.cc   | 39 +++---
 iocore/hostdb/I_HostDBProcessor.h |  7 +-
 iocore/hostdb/P_HostDBProcessor.h |  4 +++-
 3 files changed, 31 insertions(+), 19 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/c36204d5/iocore/hostdb/HostDB.cc
--
diff --git a/iocore/hostdb/HostDB.cc b/iocore/hostdb/HostDB.cc
index bb438a1..0df0cd8 100644
--- a/iocore/hostdb/HostDB.cc
+++ b/iocore/hostdb/HostDB.cc
@@ -662,19 +662,13 @@ HostDBInfo *
 probe(ProxyMutex *mutex, HostDBMD5 const &md5, bool ignore_timeout)
 {
   // If we have an entry in our hosts file, we don't need to bother with DNS
+  // Make a local copy/reference so we don't have to worry about updates.
   Ptr current_host_file_map = hostDB.hosts_file_ptr;
 
   ts::ConstBuffer hname(md5.host_name, md5.host_len);
   HostsFileMap::iterator find_result = 
current_host_file_map->hosts_file_map.find(hname);
   if (find_result != current_host_file_map->hosts_file_map.end()) {
-// TODO: Something to make this not local :/
-static HostDBInfo r;
-r.round_robin = false;
-r.round_robin_elt = false;
-r.reverse_dns = false;
-r.is_srv = false;
-ats_ip_set(r.ip(), (*find_result).second);
-return &r;
+return &(find_result->second);
   }
 
   ink_assert(this_ethread() == hostDB.lock_for_bucket((int)(fold_md5(md5.hash) 
% hostDB.buckets))->thread_holding);
@@ -2731,8 +2725,6 @@ HostDBFileContinuation::destroy()
 // proceeding at a time in any case so we might as well make these
 // globals.
 int HostDBFileUpdateActive = 0;
-// map of hostname -> IpAddr
-Ptr parsed_hosts_file_ptr(new 
RefCountedHostsFileMap());
 
 // Actual ordering doesn't matter as long as it's consistent.
 bool
@@ -2743,7 +2735,7 @@ CmpMD5(INK_MD5 const &lhs, INK_MD5 const &rhs)
 
 
 void
-ParseHostLine(char *l)
+ParseHostLine(RefCountedHostsFileMap *map, char *l)
 {
   Tokenizer elts(" \t");
   int n_elts = elts.Initialize(l, SHARE_TOKS);
@@ -2754,8 +2746,13 @@ ParseHostLine(char *l)
 for (int i = 1; i < n_elts; ++i) {
   ts::ConstBuffer name(elts[i], strlen(elts[i]));
   // If we don't have an entry already (host files only support single IPs 
for a given name)
-  if (parsed_hosts_file_ptr->hosts_file_map.find(name) == 
parsed_hosts_file_ptr->hosts_file_map.end()) {
-parsed_hosts_file_ptr->hosts_file_map[name] = ip;
+  if (map->hosts_file_map.find(name) == map->hosts_file_map.end()) {
+   HostsFileMap::mapped_type& item = map->hosts_file_map[name];
+   item.round_robin = false;
+   item.round_robin_elt = false;
+item.reverse_dns = false;
+item.is_srv = false;
+ats_ip_set(item.ip(), ip);
   }
 }
   }
@@ -2765,6 +2762,8 @@ ParseHostLine(char *l)
 void
 ParseHostFile(char const *path)
 {
+  Ptr parsed_hosts_file_ptr;
+
   // Test and set for update in progress.
   if (0 != ink_atomic_swap(&HostDBFileUpdateActive, 1)) {
 Debug("hostdb", "Skipped load of host file because update already in 
progress");
@@ -2780,6 +2779,7 @@ ParseHostFile(char const *path)
 // +1 in case no terminating newline
 int64_t size = info.st_size + 1;
 
+parsed_hosts_file_ptr = new RefCountedHostsFileMap;
 parsed_hosts_file_ptr->HostFileText = static_cast(ats_malloc(size));
 if (parsed_hosts_file_ptr->HostFileText) {
   char *base = parsed_hosts_file_ptr->HostFileText;
@@ -2805,7 +2805,7 @@ ParseHostFile(char const *path)
 while (base < spot && isspace(*base))
   ++base;// skip leading ws
 if (*base != '#' && base < spot) // non-empty non-comment line
-  ParseHostLine(base);
+  ParseHostLine(parsed_hosts_file_ptr, base);
 base = spot + 1;
   }
 
@@ -2815,10 +2815,15 @@ ParseHostFile(char const *path)
 }
   }
 
-  // Swap out hostDB's map for ours
+  // Rotate the host file maps down. We depend on two assumptions here -
+  // 1) Host files are not updated frequently. Even if updated via traffic_ctl 
that will be at least 5-10 seconds betwe

trafficserver git commit: [TS-3794]: call spdy_process_read on early read from handshake.

2015-07-23 Thread sudheerv
Repository: trafficserver
Updated Branches:
  refs/heads/master c36204d5a -> b51a2b977


[TS-3794]: call spdy_process_read on early read from handshake.


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/b51a2b97
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/b51a2b97
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/b51a2b97

Branch: refs/heads/master
Commit: b51a2b977017d0d94e751d7e2c543d71a457c159
Parents: c36204d
Author: Sudheer Vinukonda 
Authored: Thu Jul 23 21:51:09 2015 +
Committer: Sudheer Vinukonda 
Committed: Thu Jul 23 21:51:09 2015 +

--
 proxy/spdy/SpdyClientSession.cc | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b51a2b97/proxy/spdy/SpdyClientSession.cc
--
diff --git a/proxy/spdy/SpdyClientSession.cc b/proxy/spdy/SpdyClientSession.cc
index 33c87bf..d9db07f 100644
--- a/proxy/spdy/SpdyClientSession.cc
+++ b/proxy/spdy/SpdyClientSession.cc
@@ -208,13 +208,13 @@ SpdyClientSession::start()
 {SPDYLAY_SETTINGS_INITIAL_WINDOW_SIZE, SPDYLAY_ID_FLAG_SETTINGS_NONE, 
spdy_initial_window_size}};
   int r;
 
-  if (this->write_vio && (TSIOBufferReaderAvail(this->req_reader) > 0)) {
-spdy_process_read(TS_EVENT_VCONN_WRITE_READY, this);
-  }
-
   this->read_vio = (TSVIO) this->vc->do_io_read(this, INT64_MAX, 
reinterpret_cast(this->req_buffer));
   this->write_vio = (TSVIO) this->vc->do_io_write(this, INT64_MAX, 
reinterpret_cast(this->resp_reader));
 
+  if (TSIOBufferReaderAvail(this->req_reader) > 0) {
+spdy_process_read(TS_EVENT_VCONN_WRITE_READY, this);
+  }
+
   SET_HANDLER(&SpdyClientSession::state_session_readwrite);
 
   r = spdylay_submit_settings(this->session, SPDYLAY_FLAG_SETTINGS_NONE, 
entries, countof(entries));



trafficserver git commit: TS-3774 clang-format

2015-07-23 Thread zwoop
Repository: trafficserver
Updated Branches:
  refs/heads/master b51a2b977 -> 5ae63a109


TS-3774 clang-format


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/5ae63a10
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/5ae63a10
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/5ae63a10

Branch: refs/heads/master
Commit: 5ae63a109255adccadddf0e726f20d657b2ac0c0
Parents: b51a2b9
Author: Leif Hedstrom 
Authored: Fri Jul 24 00:07:50 2015 +0200
Committer: Leif Hedstrom 
Committed: Fri Jul 24 00:07:50 2015 +0200

--
 iocore/hostdb/HostDB.cc | 9 +
 1 file changed, 5 insertions(+), 4 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/5ae63a10/iocore/hostdb/HostDB.cc
--
diff --git a/iocore/hostdb/HostDB.cc b/iocore/hostdb/HostDB.cc
index 0df0cd8..9d5ece3 100644
--- a/iocore/hostdb/HostDB.cc
+++ b/iocore/hostdb/HostDB.cc
@@ -2747,9 +2747,9 @@ ParseHostLine(RefCountedHostsFileMap *map, char *l)
   ts::ConstBuffer name(elts[i], strlen(elts[i]));
   // If we don't have an entry already (host files only support single IPs 
for a given name)
   if (map->hosts_file_map.find(name) == map->hosts_file_map.end()) {
-   HostsFileMap::mapped_type& item = map->hosts_file_map[name];
-   item.round_robin = false;
-   item.round_robin_elt = false;
+HostsFileMap::mapped_type &item = map->hosts_file_map[name];
+item.round_robin = false;
+item.round_robin_elt = false;
 item.reverse_dns = false;
 item.is_srv = false;
 ats_ip_set(item.ip(), ip);
@@ -2820,7 +2820,8 @@ ParseHostFile(char const *path)
   // 2) The HostDB clients (essentially the HttpSM) copies the HostDB record 
or data over to local storage during event processing,
   //which means the data only has to be valid until the event chaining 
rolls back up to the event processor. This will certainly
   //be less than 1s
-  // The combination of these means keeping one file back in the rotation is 
sufficient to keep any outstanding references valid until
+  // The combination of these means keeping one file back in the rotation is 
sufficient to keep any outstanding references valid
+  // until
   // dropped.
   hostDB.prev_hosts_file_ptr = hostDB.hosts_file_ptr;
   hostDB.hosts_file_ptr = parsed_hosts_file_ptr;