guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 04/05: Remove Sparc support


From: Andy Wingo
Subject: [Guile-commits] 04/05: Remove Sparc support
Date: Wed, 8 May 2019 15:49:44 -0400 (EDT)

wingo pushed a commit to branch master
in repository guile.

commit 570f361c6c8308ddc574d6308b50263175cae59e
Author: Andy Wingo <address@hidden>
Date:   Wed May 8 21:41:46 2019 +0200

    Remove Sparc support
    
    Sadly, this is a dead architecture, without an official Debian port.
    Rest in peace!
---
 lightening.h            |    2 -
 lightening/lightening.c |    2 -
 lightening/sparc-cpu.c  | 2568 -----------------------------------------------
 lightening/sparc-fpu.c  | 1499 ---------------------------
 lightening/sparc.c      | 1948 -----------------------------------
 lightening/sparc.h      |  102 --
 6 files changed, 6121 deletions(-)

diff --git a/lightening.h b/lightening.h
index ae32737..c316348 100644
--- a/lightening.h
+++ b/lightening.h
@@ -95,8 +95,6 @@ typedef struct jit_reloc
 #  include "lightening/arm.h"
 #elif defined(__ppc__) || defined(__powerpc__)
 #  include "lightening/ppc.h"
-#elif defined(__sparc__)
-#  include "lightening/sparc.h"
 #elif defined(__aarch64__)
 #  include "lightening/aarch64.h"
 #elif defined(__s390__) || defined(__s390x__)
diff --git a/lightening/lightening.c b/lightening/lightening.c
index 8c9197e..0973d8a 100644
--- a/lightening/lightening.c
+++ b/lightening/lightening.c
@@ -322,8 +322,6 @@ jit_patch_there(jit_state_t* _jit, jit_reloc_t reloc, 
jit_pointer_t addr)
 # include "arm.c"
 #elif defined(__ppc__) || defined(__powerpc__)
 # include "ppc.c"
-#elif defined(__sparc__)
-# include "sparc.c"
 #elif defined(__aarch64__)
 # include "aarch64.c"
 #elif defined(__s390__) || defined(__s390x__)
diff --git a/lightening/sparc-cpu.c b/lightening/sparc-cpu.c
deleted file mode 100644
index 81f92ce..0000000
--- a/lightening/sparc-cpu.c
+++ /dev/null
@@ -1,2568 +0,0 @@
-/*
- * Copyright (C) 2013-2017, 2019  Free Software Foundation, Inc.
- *
- * This file is part of GNU lightning.
- *
- * GNU lightning is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU lightning is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
- * License for more details.
- *
- * Authors:
- *     Paulo Cesar Pereira de Andrade
- */
-
-#if PROTO
-#  define _G2_REGNO                            0x02
-#  define _G3_REGNO                            0x03
-#  define _G4_REGNO                            0x04
-#  define _O0_REGNO                            0x08
-#  define _O1_REGNO                            0x09
-#  define _SP_REGNO                            0x0e
-#  define _FP_REGNO                            0x1e
-#  define _O7_REGNO                            0x0f
-#  define _L0_REGNO                            0x10
-#  define _L1_REGNO                            0x11
-#  define _L2_REGNO                            0x12
-#  define _L3_REGNO                            0x13
-#  define _L4_REGNO                            0x14
-#  define _L5_REGNO                            0x15
-#  define _L6_REGNO                            0x16
-#  define _L7_REGNO                            0x17
-#  define _I7_REGNO                            0x1f
-/*
- *                                     - previous stack frame
- * fp  ----
- * fp- local variables (in lightning, 8 bytes space for float conversion)
- * fp- alloca
- * sp+ stack arguments
- * sp+ 6 words to save register arguments
- * sp+ 1 word for hidden address of aggregate return value (32 bits only)
- * sp+ 16 words for in and local registers
- * sp  ----
- *     decreasing memory address       - next stack frame (not yet allocated)
- */
-#  define stack_framesize                      ((16 + (__WORDSIZE == 32) + 6) 
* sizeof(jit_word_t))
-typedef union {
-    struct {                           uint32_t b: 2;  } op;
-    struct {   uint32_t _: 2;  uint32_t b: 1;  } a;
-    struct {   uint32_t _: 2;  uint32_t b: 5;  } rd;
-    struct {   uint32_t _: 2;  uint32_t b: 30; } disp30;
-    struct {   uint32_t _: 3;  uint32_t b: 4;  } cond;
-    struct {   uint32_t _: 7;  uint32_t b: 3;  } op2;
-    struct {   uint32_t _: 7;  uint32_t b: 6;  } op3;
-    struct {   uint32_t _: 10; uint32_t b: 1;  } cc1;
-    struct {   uint32_t _: 10; uint32_t b: 22; } imm22;
-    struct {   uint32_t _: 10; uint32_t b: 22; } disp22;
-    struct {   uint32_t _: 11; uint32_t b: 1;  } cc0;
-    struct {   uint32_t _: 12; uint32_t b: 1;  } p;
-    struct {   uint32_t _: 13; uint32_t b: 19; } disp19;
-    struct {   uint32_t _: 13; uint32_t b: 5;  } rs1;
-    struct {   uint32_t _: 18; uint32_t b: 1;  } i;
-    struct {   uint32_t _: 18; uint32_t b: 9;  } opf;
-    struct {   uint32_t _: 19; uint32_t b: 1;  } x;
-    struct {   uint32_t _: 19; uint32_t b: 8;  } asi;
-    struct {   uint32_t _: 19; uint32_t b: 6;  } res;
-    struct {   uint32_t _: 19; uint32_t b: 13; } simm13;
-    struct {   uint32_t _: 20; uint32_t b: 7;  } asix;
-    struct {   uint32_t _: 20; uint32_t b: 6;  } asis;
-    struct {   uint32_t _: 26; uint32_t b: 6;  } shim;
-    struct {   uint32_t _: 25; uint32_t b: 7;  } imm7;
-    struct {   uint32_t _: 27; uint32_t b: 5;  } rs2;
-    int32_t                                                      v;
-} jit_instr_t;
-#  define ii(i)                                *_jit->pc.ui++ = i
-#  define s7_p(imm)                    ((imm) <= 63 && (imm) >= -64)
-#  define s13_p(imm)                   ((imm) <= 4095 && (imm) >= -4096)
-#  define s19_p(imm)                   ((imm) <= 262143 && (imm) >= -262144)
-#  define s22_p(imm)                   ((imm) <= 2097151 && (imm) >= -20971512)
-#  define s30_p(imm)                   ((imm) <= 536870911 && (imm) >= 
-536870912)
-#  define f1(op, disp30)               _f1(_jit, op, disp30)
-static void _f1(jit_state_t*,int32_t,int32_t);
-#  define f2r(op, rd, op2, imm22)      _f2r(_jit, op, rd, op2, imm22)
-static void _f2r(jit_state_t*,int32_t,int32_t,int32_t,int32_t);
-#  define f2b(op, a, cond, op2, disp22)        _f2b(_jit, op, a, cond, op2, 
disp22)
-static void
-_f2b(jit_state_t*,int32_t,int32_t,int32_t,int32_t,int32_t);
-#  if __WORDSIZE == 64
-#    define f2bp(op,a,cond,op2,cc1,cc0,p,disp19)                               
\
-       _f2bp(_jit,op,a,cond,op2,cc1,cc0,p,disp19)
-static void
-_f2bp(jit_state_t*,int32_t,int32_t,int32_t,int32_t,int32_t,
-      int32_t,int32_t,int32_t);
-#  endif
-#  define f3r(op, rd, op3, rs1, rs2)   _f3r(_jit, op, rd, op3, rs1, rs2)
-static void _f3r(jit_state_t*,
-                int32_t,int32_t,int32_t,int32_t,int32_t);
-#  if __WORDSIZE == 64
-#  define f3rx(op, rd, op3, rs1, rs2)  _f3rx(_jit, op, rd, op3, rs1, rs2)
-static void _f3rx(jit_state_t*,
-                 int32_t,int32_t,int32_t,int32_t,int32_t);
-#  endif
-#  define f3i(op, rd, op3, rs1, simm13)        _f3i(_jit, op, rd, op3, rs1, 
simm13)
-static void _f3i(jit_state_t*,
-                int32_t,int32_t,int32_t,int32_t,int32_t);
-#  define f3s(op, rd, op3, rs1, simm13)        _f3s(_jit, op, rd, op3, rs1, 
simm13)
-static void _f3s(jit_state_t*,
-                int32_t,int32_t,int32_t,int32_t,int32_t);
-#  define f3t(cond, rs1, i, ri)                _f3t(_jit, cond, rs1, i, ri)
-static void _f3t(jit_state_t*,int32_t,int32_t,int32_t,int32_t)
-    maybe_unused;
-#  define f3a(op, rd, op3, rs1, rs2)   _f3a(_jit, op, rd, op3, rs1, asi, rs2)
-static void _f3a(jit_state_t*,int32_t,
-                int32_t,int32_t,int32_t,int32_t,int32_t)
-    maybe_unused;
-#  define LDSB(rs1, rs2, rd)           f3r(3, rd, 9, rs1, rs2)
-#  define LDSBI(rs1, imm, rd)          f3i(3, rd, 9, rs1, imm)
-#  define LDSH(rs1, rs2, rd)           f3r(3, rd, 10, rs1, rs2)
-#  define LDSHI(rs1, imm, rd)          f3i(3, rd, 10, rs1, imm)
-#  define LDUB(rs1, rs2, rd)           f3r(3, rd, 1, rs1, rs2)
-#  define LDUBI(rs1, imm, rd)          f3i(3, rd, 1, rs1, imm)
-#  define LDUH(rs1, rs2, rd)           f3r(3, rd, 2, rs1, rs2)
-#  define LDUHI(rs1, imm, rd)          f3i(3, rd, 2, rs1, imm)
-#  if __WORDSIZE == 32
-#    define LD(rs1, rs2, rd)           f3r(3, rd, 0, rs1, rs2)
-#    define LDI(rs1, imm, rd)          f3i(3, rd, 0, rs1, imm)
-#    define LDD(rs1, rs2, rd)          f3r(3, rd, 3, rs1, rs2)
-#    define LDDI(rs1, imm, rd)         f3i(3, rd, 3, rs1, imm)
-#  else
-#    define LDSW(rs1, rs2, rd)         f3r(3, rd, 8, rs1, rs2)
-#    define LDSWI(rs1, imm, rd)                f3i(3, rd, 8, rs1, imm)
-#    define LDUW(rs1, rs2, rd)         f3r(3, rd, 0, rs1, rs2)
-#    define LDUWI(rs1, imm, rd)                f3i(3, rd, 0, rs1, imm)
-#    define LDX(rs1, rs2, rd)          f3r(3, rd, 11, rs1, rs2)
-#    define LDXI(rs1, imm, rd)         f3i(3, rd, 11, rs1, imm)
-#  endif
-#  define LDSBA(rs1, rs2, asi, rd)     f3a(3, rd, 25, rs1, asi, rs2)
-#  define LDSHA(rs1, rs2, asi, rd)     f3a(3, rd, 26, rs1, asi, rs2)
-#  define LDUBA(rs1, rs2, asi, rd)     f3a(3, rd, 17, rs1, asi, rs2)
-#  define LDUHA(rs1, rs2, asi, rd)     f3a(3, rd, 18, rs1, asi, rs2)
-#  if __WORDSIZE == 32
-#    define LDA(rs1, rs2, asi, rd)     f3a(3, rd, 16, rs1, asi, rs2)
-#    define LDDA(rs1, rs2, asi, rd)    f3a(3, rd, 19, rs1, asi, rs2)
-#  else
-#    define LDSWA(rs1, rs2, asi, rd)   f3a(3, rd, 24, rs1, asi, rs2)
-#    define LDUWA(rs1, rs2, asi, rd)   f3a(3, rd, 16, rs1, asi, rs2)
-#    define LDXA(rs1, rs2, asi, rd)    f3a(3, rd, 27, rs1, asi, rs2)
-#  endif
-#  define LDC(rs1, rs2, rd)            f3r(3, rd, 48, rs1, rs2)
-#  define LDCI(rs1, imm, rd)           f3i(3, rd, 48, rs1, imm)
-#  define LDDC(rs1, rs2, rd)           f3r(3, rd, 51, rs1, rs2)
-#  define LDDCI(rs1, imm, rd)          f3i(3, rd, 51, rs1, imm)
-#  define LDCSR(rs1, rs2, rd)          f3r(3, rd, 49, rs1, rs2)
-#  define LDCSRI(rs1, imm, rd)         f3i(3, rd, 49, rs1, imm)
-#  define STB(rd, rs1, rs2)            f3r(3, rd, 5, rs1, rs2)
-#  define STBI(rd, rs1, imm)           f3i(3, rd, 5, rs1, imm)
-#  define STH(rd, rs1, rs2)            f3r(3, rd, 6, rs1, rs2)
-#  define STHI(rd, rs1, imm)           f3i(3, rd, 6, rs1, imm)
-#  if __WORDSIZE == 32
-#    define ST(rd, rs1, rs2)           f3r(3, rd, 4, rs1, rs2)
-#    define STI(rd, rs1, imm)          f3i(3, rd, 4, rs1, imm)
-#    define STD(rrd, s1, rs2)          f3r(3, rd, 7, rs1, rs2)
-#    define STDI(rd, rs1, imm)         f3i(3, rd, 7, rs1, imm)
-#  else
-#    define STW(rd, rs1, rs2)          f3r(3, rd, 4, rs1, rs2)
-#    define STWI(rd, rs1, imm)         f3i(3, rd, 4, rs1, imm)
-#    define STX(rd, rs1, rs2)          f3r(3, rd, 14, rs1, rs2)
-#    define STXI(rd, rs1, imm)         f3i(3, rd, 14, rs1, imm)
-#  endif
-#  define STBA(rd, rs1, rs2)           f3a(3, rd, 21, rs1, asi, rs2)
-#  define STHA(rd, rs1, rs2)           f3a(3, rd, 22, rs1, asi, rs2)
-#  if __WORDSIZE == 32
-#    define STA(rd, rs1, rs2)          f3a(3, rd, 20, rs1, asi, rs2)
-#    define STDA(rd, rs1, rs2)         f3a(3, rd, 23, rs1, asi, rs2)
-#  else
-#    define STWA(rd, rs1, rs2)         f3a(3, rd, 20, rs1, asi, rs2)
-#    define STXA(rd, rs1, rs2)         f3a(3, rd, 30, rs1, asi, rs2)
-#  endif
-#  define STC(rd, rs1, rs2)            f3r(3, rd, 52, rs1, rs2)
-#  define STCI(rd, rs1, imm)           f3i(3, rd, 52, rs1, imm)
-#  define STDC(rd, rs1, rs2)           f3r(3, rd, 55, rs1, rs2)
-#  define STDCI(rd, rs1, imm)          f3i(3, rd, 55, rs1, imm)
-#  define STCSR(rd, rs1, rs2)          f3r(3, rd, 53, rs1, rs2)
-#  define STCSRI(rd, rs1, imm)         f3i(3, rd, 53, rs1, imm)
-#  define STDCQ(rd, rs1, rs2)          f3r(3, rd, 54, rs1, rs2)
-#  define STDCQI(rd, rs1, imm)         f3i(3, rd, 54, rs1, imm)
-#  define LDSTUB(rs1, rs2, rd)         f3r(3, rd, 13, rs1, rs2)
-#  define LDSTUBI(rs1, imm, rd)                f3r(3, rd, 13, rs1, imm)
-#  define LDSTUBA(rs1, rs2, asi, rd)   f3a(3, rd, 21, rs1, asi, rs2)
-#  define SWAP(rs1, rs2, rd)           f3r(3, rd, 15, rs1, rs2)
-#  define SWAPI(rs1, imm, rd)          f3r(3, rd, 15, rs1, imm)
-#  define SWAPA(rs1, rs2, asi, rd)     f3a(3, rd, 23, rs1, asi, rs2)
-#  define NOP()                                SETHI(0, 0)
-#  define HI(im)                       ((im) >> 10)
-#  define LO(im)                       ((im) & 0x3ff)
-#  define SETHI(im, rd)                        f2r(0, rd, 4, im)
-#  define AND(rs1, rs2, rd)            f3r(2, rd, 1, rs1, rs2)
-#  define ANDI(rs1, imm, rd)           f3i(2, rd, 1, rs1, imm)
-#  define ANDcc(rs1, rs2, rd)          f3r(2, rd, 17, rs1, rs2)
-#  define ANDIcc(rs1, imm, rd)         f3i(2, rd, 17, rs1, imm)
-#  define BTST(rs1, rs2)               ANDcc(rs1, rs2, 0)
-#  define BTSTI(rs1, imm)              ANDIcc(rs1, imm, 0)
-#  define ANDN(rs1, rs2, rd)           f3r(2, rd, 5, rs1, rs2)
-#  define ANDNI(rs1, imm, rd)          f3i(2, rd, 5, rs1, imm)
-#  define ANDNcc(rs1, rs2, rd)         f3r(2, rd, 21, rs1, rs2)
-#  define ANDNIcc(rs1, imm, rd)                f3i(2, rd, 21, rs1, imm)
-#  define OR(rs1, rs2, rd)             f3r(2, rd, 2, rs1, rs2)
-#  define ORI(rs1, imm, rd)            f3i(2, rd, 2, rs1, imm)
-#  define ORcc(rs1, rs2, rd)           f3r(2, rd, 18, rs1, rs2)
-#  define ORIcc(rs1, imm, rd)          f3i(2, rd, 18, rs1, imm)
-#  define ORN(rs1, rs2, rd)            f3r(2, rd, 6, rs1, rs2)
-#  define ORNI(rs1, imm, rd)           f3i(2, rd, 6, rs1, imm)
-#  define ORNcc(rs1, rs2, rd)          f3r(2, rd, 22, rs1, rs2)
-#  define ORNIcc(rs1, imm, rd)         f3i(2, rd, 22, rs1, imm)
-#  define XOR(rs1, rs2, rd)            f3r(2, rd, 3, rs1, rs2)
-#  define XORI(rs1, imm, rd)           f3i(2, rd, 3, rs1, imm)
-#  define XORcc(rs1, rs2, rd)          f3r(2, rd, 19, rs1, rs2)
-#  define XORIcc(rs1, imm, rd)         f3i(2, rd, 19, rs1, imm)
-#  define XNOR(rs1, rs2, rd)           f3r(2, rd, 7, rs1, rs2)
-#  define XNORI(rs1, imm, rd)          f3i(2, rd, 7, rs1, imm)
-#  define XNORcc(rs1, rs2, rd)         f3r(2, rd, 23, rs1, rs2)
-#  define XNORIcc(rs1, imm, rd)                f3i(2, rd, 23, rs1, imm)
-#  define SLL(rs1, rs2, rd)            f3r(2, rd, 37, rs1, rs2)
-#  define SLLI(rs1, imm, rd)           f3i(2, rd, 37, rs1, imm)
-#  define SRL(rs1, rs2, rd)            f3r(2, rd, 38, rs1, rs2)
-#  define SRLI(rs1, imm, rd)           f3i(2, rd, 38, rs1, imm)
-#  define SRA(rs1, rs2, rd)            f3r(2, rd, 39, rs1, rs2)
-#  define SRAI(rs1, imm, rd)           f3i(2, rd, 39, rs1, imm)
-#  if __WORDSIZE == 64
-#    define SLLX(rs1, rs2, rd)         f3rx(2, rd, 37, rs1, rs2)
-#    define SLLXI(rs1, imm, rd)                f3s(2, rd, 37, rs1, imm)
-#    define SRLX(rs1, rs2, rd)         f3rx(2, rd, 38, rs1, rs2)
-#    define SRLXI(rs1, imm, rd)                f3s(2, rd, 38, rs1, imm)
-#    define SRAX(rs1, rs2, rd)         f3rx(2, rd, 39, rs1, rs2)
-#    define SRAXI(rs1, imm, rd)                f3s(2, rd, 39, rs1, imm)
-#  endif
-#  define ADD(rs1, rs2, rd)            f3r(2, rd, 0, rs1, rs2)
-#  define ADDI(rs1, imm, rd)           f3i(2, rd, 0, rs1, imm)
-#  define ADDcc(rs1, rs2, rd)          f3r(2, rd, 16, rs1, rs2)
-#  define ADDIcc(rs1, imm, rd)         f3i(2, rd, 16, rs1, imm)
-#  define ADDX(rs1, rs2, rd)           f3r(2, rd, 8, rs1, rs2)
-#  define ADDXI(rs1, imm, rd)          f3i(2, rd, 8, rs1, imm)
-#  define ADDXcc(rs1, rs2, rd)         f3r(2, rd, 24, rs1, rs2)
-#  define ADDXIcc(rs1, imm, rd)                f3i(2, rd, 24, rs1, imm)
-#  define TADDcc(rs1, rs2, rd)         f3r(2, rd, 32, rs1, rs2)
-#  define TADDIcc(rs1, imm, rd)                f3i(2, rd, 32, rs1, imm)
-#  define TADDccTV(rs1, rs2, rd)       f3r(2, rd, 34, rs1, rs2)
-#  define TADDIccTV(rs1, imm, rd)      f3i(2, rd, 34, rs1, imm)
-#  define SUB(rs1, rs2, rd)            f3r(2, rd, 4, rs1, rs2)
-#  define NEG(rs1, rd)                 SUB(0, rs1, rd)
-#  define SUBI(rs1, imm, rd)           f3i(2, rd, 4, rs1, imm)
-#  define SUBcc(rs1, rs2, rd)          f3r(2, rd, 20, rs1, rs2)
-#  define SUBIcc(rs1, imm, rd)         f3i(2, rd, 20, rs1, imm)
-#  define CMP(rs1, rs2)                        SUBcc(rs1, rs2, 0)
-#  define CMPI(rs1, imm)               SUBIcc(rs1, imm, 0)
-#  define SUBX(rs1, rs2, rd)           f3r(2, rd, 12, rs1, rs2)
-#  define SUBXI(rs1, imm, rd)          f3i(2, rd, 12, rs1, imm)
-#  define SUBXcc(rs1, rs2, rd)         f3r(2, rd, 28, rs1, rs2)
-#  define SUBXIcc(rs1, imm, rd)                f3i(2, rd, 28, rs1, imm)
-#  define TSUBcc(rs1, rs2, rd)         f3r(2, rd, 33, rs1, rs2)
-#  define TDADDIcc(rs1, imm, rd)       f3i(2, rd, 33, rs1, imm)
-#  define TSUBccTV(rs1, rs2, rd)       f3r(2, rd, 35, rs1, rs2)
-#  define TSUBIccTV(rs1, imm, rd)      f3i(2, rd, 35, rs1, imm)
-#  define MULScc(rs1, rs2, rd)         f3r(2, rd, 36, rs1, rs2)
-#  define MULSIcc(rs1, imm, rd)                f3i(2, rd, 36, rs1, imm)
-#  define UMUL(rs1, rs2, rd)           f3r(2, rd, 10, rs1, rs2)
-#  define UMULI(rs1, imm, rd)          f3i(2, rd, 10, rs1, imm)
-#  define SMUL(rs1, rs2, rd)           f3r(2, rd, 11, rs1, rs2)
-#  define SMULI(rs1, imm, rd)          f3i(2, rd, 11, rs1, imm)
-#  define UMULcc(rs1, rs2, rd)         f3r(2, rd, 26, rs1, rs2)
-#  define UMULIcc(rs1, imm, rd)                f3i(2, rd, 26, rs1, imm)
-#  define SMULcc(rs1, rs2, rd)         f3r(2, rd, 27, rs1, rs2)
-#  define SMULIcc(rs1, imm, rd)                f3i(2, rd, 27, rs1, imm)
-#  define UDIV(rs1, rs2, rd)           f3r(2, rd, 14, rs1, rs2)
-#  define UDIVI(rs1, imm, rd)          f3i(2, rd, 14, rs1, imm)
-#  define SDIV(rs1, rs2, rd)           f3r(2, rd, 15, rs1, rs2)
-#  define SDIVI(rs1, imm, rd)          f3i(2, rd, 15, rs1, imm)
-#  define UDIVcc(rs1, rs2, rd)         f3r(2, rd, 30, rs1, rs2)
-#  define UDIVIcc(rs1, imm, rd)                f3i(2, rd, 30, rs1, imm)
-#  define SDIVcc(rs1, rs2, rd)         f3r(2, rd, 31, rs1, rs2)
-#  define SDIVIcc(rs1, imm, rd)                f3i(2, rd, 31, rs1, imm)
-#  if __WORDSIZE == 64
-#    define MULX(rs1, rs2, rd)         f3r(2, rd, 9, rs1, rs2)
-#    define MULXI(rs1, imm, rd)                f3i(2, rd, 9, rs1, imm)
-#    define SDIVX(rs1, rs2, rd)                f3r(2, rd, 45, rs1, rs2)
-#    define SDIVXI(rs1, imm, rd)       f3i(2, rd, 45, rs1, imm)
-#    define UDIVX(rs1, rs2, rd)                f3r(2, rd, 13, rs1, rs2)
-#    define UDIVXI(rs1, imm, rd)       f3i(2, rd, 13, rs1, imm)
-#  endif
-#  define SAVE(rs1, rs2, rd)           f3r(2, rd, 60, rs1, rs2)
-#  define SAVEI(rs1, imm, rd)          f3i(2, rd, 60, rs1, imm)
-#  define RESTORE(rs1, rs2, rd)                f3r(2, rd, 61, rs1, rs2)
-#  define RESTOREI(rs1, imm, rd)       f3i(2, rd, 61, rs1, imm)
-#  define SPARC_BA                     8       /* always */
-#  define SPARC_BN                     0       /* never */
-#  define SPARC_BNE                    9       /* not equal - not Z */
-#  define SPARC_BNZ                    SPARC_BNE
-#  define SPARC_BE                     1       /* equal - Z */
-#  define SPARC_BZ                     SPARC_BE
-#  define SPARC_BG                     10      /* greater - not (Z or (N xor 
V)) */
-#  define SPARC_BLE                    2       /* less or equal - Z or (N xor 
V) */
-#  define SPARC_BGE                    11      /* greater or equal - not (N 
xor V) */
-#  define SPARC_BL                     3       /* less - N xor V */
-#  define SPARC_BGU                    12      /* greater unsigned - not (C or 
Z) */
-#  define SPARC_BLEU                   4       /* less or equal unsigned - C 
or Z */
-#  define SPARC_BCC                    13      /* carry clear - not C */
-#  define SPARC_BGEU                   SPARC_BCC
-#  define SPARC_BCS                    5       /* carry set - C */
-#  define SPARC_BLU                    SPARC_BCS
-#  define SPARC_BPOS                   14      /* positive - not N */
-#  define SPARC_BNEG                   6       /* negative - N */
-#  define SPARC_BVC                    15      /* overflow clear - not V */
-#  define SPARC_BVS                    7       /* overflow set - V */
-/* Preferred BPcc integer branch opcodes */
-#  if __WORDSIZE == 64
-#    define SPARC_BPA                  8       /* always - 1 */
-#    define SPARC_BPN                  0       /* never - 0 */
-#    define SPARC_BPNE                 9       /* not equal - not Z */
-#    define SPARC_BPE                  1       /* equal - Z */
-#    define SPARC_BPG                  10      /* greater - not (Z or (N xor 
V)) */
-#    define SPARC_BPLE                 2       /* less or equal - Z or (N xor 
V) */
-#    define SPARC_BPGE                 11      /* greater or equal - not (N 
xor V) */
-#    define SPARC_BPL                  3       /* less - N xor V */
-#    define SPARC_BPGU                 12      /* greater unsigned - not (C or 
V) */
-#    define SPARC_BPLEU                        4       /* less or equal 
unsigned  - C or Z */
-#    define SPARC_BPCC                 13      /* carry clear (greater than or 
equal, unsigned) - not C */
-#    define SPARC_BPCS                 5       /* carry set (less than, 
unsigned) - C */
-#    define SPARC_BPPOS                        14      /* positive - not N */
-#    define SPARC_BPNEG                        6       /* negative - N */
-#    define SPARC_BPVC                 15      /* overflow clear - not V */
-#    define SPARC_BPVS                 7       /* overflow set - V */
-#  endif
-#  define B(cc, imm)                   f2b(0, 0, cc, 2, imm)
-#  define Ba(cc, imm)                  f2b(0, 1, cc, 2, imm)
-#  define BA(imm)                      B(SPARC_BA, imm)
-#  define BAa(imm)                     Ba(SPARC_BA, imm)
-#  define BN(imm)                      B(SPARC_BN, imm)
-#  define BNa(imm)                     Ba(SPARC_BN, imm)
-#  define BNE(imm)                     B(SPARC_BNE, imm)
-#  define BNEa(imm)                    Ba(SPARC_BNE, imm)
-#  define BNZ(imm)                     BNE(imm)
-#  define BNZa(imm)                    BNEa(imm)
-#  define BE(imm)                      B(SPARC_BE, imm)
-#  define BEa(imm)                     Ba(SPARC_BE, imm)
-#  define BZ(imm)                      BE(imm)
-#  define BZa(imm)                     BEa(imm)
-#  define BG(imm)                      B(SPARC_BG, imm)
-#  define BGa(imm)                     Ba(SPARC_BG, imm)
-#  define BLE(imm)                     B(SPARC_BLE, imm)
-#  define BLEa(imm)                    Ba(SPARC_BLE, imm)
-#  define BGE(imm)                     B(SPARC_BGE, imm)
-#  define BGEa(imm)                    Ba(SPARC_BGE, imm)
-#  define BL(imm)                      B(SPARC_BL, imm)
-#  define BLa(imm)                     Ba(SPARC_BL, imm)
-#  define BGU(imm)                     B(SPARC_BGU, imm)
-#  define BGUa(imm)                    Ba(SPARC_BGU, imm)
-#  define BLEU(imm)                    B(SPARC_BLEU, imm)
-#  define BLEUa(imm)                   Ba(SPARC_BLEU, imm)
-#  define BCC(imm)                     B(SPARC_BCC, imm)
-#  define BCCa(imm)                    Ba(SPARC_BCC, imm)
-#  define BGEU(imm)                    BCC(imm)
-#  define BGEUa(imm)                   BCCa(imm)
-#  define BCS(imm)                     B(SPARC_BCS, imm)
-#  define BCSa(imm)                    Ba(SPARC_BCS, imm)
-#  define BLU(imm)                     BCS(imm)
-#  define BLUa(imm)                    BCSa(imm)
-#  define BPOS(imm)                    B(SPARC_BPOS, imm)
-#  define BPOSa(imm)                   Ba(SPARC_BPOS, imm)
-#  define BNEG(imm)                    B(SPARC_BNEG, imm)
-#  define BNEGa(imm)                   Ba(SPARC_BNEG, imm)
-#  define BVC(imm)                     B(SPARC_BVC, imm)
-#  define BVCa(imm)                    Ba(SPARC_BVC, imm)
-#  define BVS(imm)                     B(SPARC_BVS, imm)
-#  define BVSa(imm)                    Ba(SPARC_BVS, imm)
-#  if __WORDSIZE == 64
-#    define BPccap(cc,a,cc1, cc2,p,imm)        f2bp(0, a, cc, 1, cc1, cc0, p, 
imm)
-#    define BPap(cc, imm)              f2bp(0, 1, cc, 1, 1, 0, p, imm)
-#    define BPa(cc, imm)               f2bp(0, 1, cc, 1, 1, 0, 1, imm)
-#    define BP(cc, imm)                        f2bp(0, 0, cc, 1, 1, 0, 1, imm)
-#    define BPA(imm)                   BP(SPARC_BPA, imm)
-#    define BPN(imm)                   BP(SPARC_BPN, imm)
-#    define BNPE(imm)                  BP(SPARC_BPNE, imm)
-#    define BPE(imm)                   BP(SPARC_BPE, imm)
-#    define BPG(imm)                   BP(SPARC_BPG, imm)
-#    define BPLE(imm)                  BP(SPARC_BPLE, imm)
-#    define BPGE(imm)                  BP(SPARC_BPGE, imm)
-#    define BPL(imm)                   BP(SPARC_BPL, imm)
-#    define BPGU(imm)                  BP(SPARC_BPGU, imm)
-#    define BPLEU(imm)                 BP(SPARC_BPLEU, imm)
-#    define BPCC(imm)                  BP(SPARC_BPCC, imm)
-#    define BPCS(imm)                  BP(SPARC_BPCS, imm)
-#    define BPPOS(imm)                 BP(SPARC_BPPOS, imm)
-#    define BPNEG(imm)                 BP(SPARC_BPNEG, imm)
-#    define BPVC(imm)                  BP(SPARC_BPVC, imm)
-#    define BPVS(imm)                  BP(SPARC_BPVS, imm)
-#  endif
-#  define SPARC_CBA                    8       /* always */
-#  define SPARC_CBN                    0       /* never */
-#  define SPARC_CB3                    7       /* 3 */
-#  define SPARC_CB2                    6       /* 2 */
-#  define SPARC_CB23                   5       /* 2 or 3 */
-#  define SPARC_CB1                    4       /* 1 */
-#  define SPARC_CB13                   3       /* 1 or 3 */
-#  define SPARC_CB12                   2       /* 1 or 2 */
-#  define SPARC_CB123                  1       /* 1 or 2 or 3 */
-#  define SPARC_CB0                    9       /* 0 */
-#  define SPARC_CB03                   10      /* 0 or 3 */
-#  define SPARC_CB02                   11      /* 0 or 2 */
-#  define SPARC_CB023                  12      /* 0 or 2 or 3 */
-#  define SPARC_CB01                   13      /* 0 or 1 */
-#  define SPARC_CB013                  14      /* 0 or 1 or 3 */
-#  define SPARC_CB012                  15      /* 0 or 1 or 2 */
-#  define CB(cc, imm)                  f2b(0, 0, cc, 7, imm)
-#  define CBa(cc, imm)                 f2b(0, 1, cc, 7, imm)
-#  define CBA(imm)                     CB(SPARC_CBA, imm)
-#  define CBAa(imm)                    CBa(SPARC_CBA, imm)
-#  define CBN(imm)                     CB(SPARC_CBN, imm)
-#  define CBNa(imm)                    CBa(SPARC_CBN, imm)
-#  define CB3(imm)                     CB(SPARC_CB3, imm)
-#  define CB3a(imm)                    CBa(SPARC_CB3, imm)
-#  define CB2(imm)                     CB(SPARC_CB2, imm)
-#  define CB2a(imm)                    CBa(SPARC_CB2, imm)
-#  define CB23(imm)                    CB(SPARC_CB23, imm)
-#  define CB23a(imm)                   CBa(SPARC_CB23, imm)
-#  define CB1(imm)                     CB(SPARC_CB1, imm)
-#  define CB1a(imm)                    CBa(SPARC_CB1, imm)
-#  define CB13(imm)                    CB(SPARC_CB13, imm)
-#  define CB13a(imm)                   CBa(SPARC_CB13, imm)
-#  define CB12(imm)                    CB(SPARC_CB12, imm)
-#  define CB12a(imm)                   CBa(SPARC_CB12, imm)
-#  define CB123(imm)                   CB(SPARC_CB123, imm)
-#  define CB123a(imm)                  CBa(SPARC_CB123, imm)
-#  define CB0(imm)                     CB(SPARC_CB0, imm)
-#  define CB0a(imm)                    CBa(SPARC_CB0, imm)
-#  define CB03(imm)                    CB(SPARC_CB03, imm)
-#  define CB03a(imm)                   CBa(SPARC_CB03, imm)
-#  define CB02(imm)                    CB(SPARC_CB02, imm)
-#  define CB02a(imm)                   CBa(SPARC_CB02, imm)
-#  define CB023(imm)                   CB(SPARC_CB103, imm)
-#  define CB023a(imm)                  CBa(SPARC_CB023, imm)
-#  define CB01(imm)                    CB(SPARC_CB01, imm)
-#  define CB01a(imm)                   CBa(SPARC_CB01, imm)
-#  define CB013(imm)                   CB(SPARC_CB013, imm)
-#  define CB013a(imm)                  CBa(SPARC_CB013, imm)
-#  define CB012(imm)                   CB(SPARC_CB012, imm)
-#  define CB012a(imm)                  CBa(SPARC_CB012, imm)
-#  define CALLI(imm)                   f1(1, imm)
-#  define CALL(r0)                     JMPL(_O7_REGNO, r0, 0)
-#  define RETL()                       JMPLI(0, _O7_REGNO, 8)
-#  define RET()                                JMPLI(0, _I7_REGNO, 8)
-#  define JMPL(rd, rs1, rs2)           f3r(2, rd, 56, rs1, rs2)
-#  define JMPLI(rd, rs1, imm)          f3i(2, rd, 56, rs1, imm)
-#  define RETT(rs1, rs2)               f3r(2, 0, 57, rs1, rs2)
-#  define RETTI(rs1, imm)              f3i(2, 0, 57, rs1, imm)
-#  define SPARC_TA                     8       /* always */
-#  define SPARC_TN                     0       /* never */
-#  define SPARC_TNE                    9       /* not equal - not Z */
-#  define SPARC_TNZ                    SPARC_BNE
-#  define SPARC_TE                     1       /* equal - Z */
-#  define SPARC_TZ                     SPARC_BE
-#  define SPARC_TG                     10      /* greater - not (Z or (N xor 
V)) */
-#  define SPARC_TLE                    2       /* less or equal - Z or (N xor 
V) */
-#  define SPARC_TGE                    11      /* greater or equal - not (N 
xor V) */
-#  define SPARC_TL                     3       /* less - N xor V */
-#  define SPARC_TGU                    12      /* greater unsigned - not (C or 
Z) */
-#  define SPARC_TLEU                   4       /* less or equal unsigned - C 
or Z */
-#  define SPARC_TCC                    13      /* carry clear - not C */
-#  define SPARC_TGEU                   SPARC_BCC
-#  define SPARC_TCS                    5       /* carry set - C */
-#  define SPARC_TLU                    SPARC_BCS
-#  define SPARC_TPOS                   14      /* positive - not N */
-#  define SPARC_TNEG                   6       /* negative - N */
-#  define SPARC_TVC                    15      /* overflow clear - not V */
-#  define SPARC_TVS                    7       /* overflow set - V */
-#  define T(cc, rs1, rs2)              f3t(cc, rs1, 0, rs2)
-#  define TI(cc, rs1, imm)             f3t(cc, rs1, 1, imm)
-#  define TA(rs1, rs2)                 T(SPARC_TA, rs1, rs2)
-#  define TAI(rs1, imm)                        TI(SPARC_TA, rs1, imm)
-#  define TN(rs1, rs2)                 T(SPARC_TN, rs1, rs2)
-#  define TNI(rs1, imm)                        TI(SPARC_TN, rs1, imm)
-#  define TNE(rs1, rs2)                        T(SPARC_TNE, rs1, rs2)
-#  define TNEI(rs1, imm)               TI(SPARC_TNE, rs1, imm)
-#  define TNZ(rs1, rs2)                        TNE(rs1, rs2)
-#  define TNZI(rs1, imm)               TNEI(rs1, imm)
-#  define TE(rs1, rs2)                 T(SPARC_TE, rs1, rs2)
-#  define TEI(rs1, imm)                        TI(SPARC_TE, rs1, imm)
-#  define TZ(rs1, rs2)                 TE(rs1, rs2)
-#  define TZI(rs1, imm)                        TEI(rs1, imm)
-#  define TG(rs1, rs2)                 T(SPARC_TG, rs1, rs2)
-#  define TGI(rs1, imm)                        TI(SPARC_TG, rs1, imm)
-#  define TLE(rs1, rs2)                        T(SPARC_TLE, rs1, rs2)
-#  define TLEI(rs1, imm)               TI(SPARC_TLE, rs1, imm)
-#  define TGE(rs1, rs2)                        T(SPARC_TGE, rs1, rs2)
-#  define TGEI(rs1, imm)               TI(SPARC_TGE, rs1, imm)
-#  define TL(rs1, rs2)                 T(SPARC_TL, rs1, rs2)
-#  define TLI(rs1, imm)                        TI(SPARC_TL, rs1, imm)
-#  define TGU(rs1, rs2)                        T(SPARC_TGU, rs1, rs2)
-#  define TGUI(rs1, imm)               TI(SPARC_TGU, rs1, imm)
-#  define TLEU(rs1, rs2)               T(SPARC_TLEU, rs1, rs2)
-#  define TLEUI(rs1, imm)              TI(SPARC_TLEU, rs1, imm)
-#  define TCC(rs1, rs2)                        T(SPARC_TCC, rs1, rs2)
-#  define TCCI(rs1, imm)               TI(SPARC_TCC, rs1, imm)
-#  define TGEU(rs1, rs2)               TCC(rs1, rs2)
-#  define TGEUI(rs1, imm)              TCCI(rs1, imm)
-#  define TCS(rs1, rs2)                        T(SPARC_TCC, rs1, rs2)
-#  define TCSI(rs1, imm)               TI(SPARC_TCC, rs1, imm)
-#  define TLU(rs1, rs2)                        TCS(rs1, rs2)
-#  define TLUI(rs1, imm)               TCSI(rs1, imm)
-#  define TPOS(rs1, rs2)               T(SPARC_TPOS, rs1, rs2)
-#  define TPOSI(rs1, imm)              TI(SPARC_TPOS, rs1, imm)
-#  define TNEG(rs1, rs2)               T(SPARC_TNEG, rs1, rs2)
-#  define TNEGI(rs1, imm)              TI(SPARC_TNEG, rs1, imm)
-#  define TVC(rs1, rs2)                        T(SPARC_TVC, rs1, rs2)
-#  define TVCI(rs1, imm)               TI(SPARC_TVC, rs1, imm)
-#  define TVS(rs1, rs2)                        T(SPARC_TVS, rs1, rs2)
-#  define TVSI(rs1, imm)               TI(SPARC_TVS, rs1, imm)
-#  define RDY(rd)                      f3r(2, rd, 40, 0, 0)
-#  define RDASR(rs1, rd)               f3r(2, rd, 40, rs1, 0)
-#  define RDPSR(rd)                    f3r(2, rd, 41, 0, 0)
-#  define RDWIM(rd)                    f3r(2, rd, 42, 0, 0)
-#  define RDTBR(rd)                    f3r(2, rd, 43, 0, 0)
-#  define WRY(rs1, rs2)                        f3r(2, 0, 48, rs1, rs2)
-#  define WRYI(rs1, imm)               f3i(2, 0, 48, rs1, imm)
-#  define WRASR(rs1, rs2, rd)          f3r(2, rd, 48, rs1, rs2)
-#  define WRASRI(rs1, imm, rd)         f3i(2, rd, 48, rs1, imm)
-#  define WRPSR(rs1, rs2, rd)          f3r(2, rd, 49, rs1, rs2)
-#  define WRPSRI(rs1, imm, rd)         f3i(2, rd, 49, rs1, imm)
-#  define WRWIM(rs1, rs2, rd)          f3r(2, rd, 50, rs1, rs2)
-#  define WRWIMI(rs1, imm, rd)         f3i(2, rd, 50, rs1, imm)
-#  define WRTBR(rs1, rs2, rd)          f3r(2, rd, 51, rs1, rs2)
-#  define WRTBRI(rs1, imm, rd)         f3i(2, rd, 51, rs1, imm)
-#  define STBAR()                      f3i(2, 0, 40, 15, 0)
-#  define UNIMP(imm)                   f2r(0, 0, 0, imm)
-#  define FLUSH(rs1, rs2)              f3r(2, 0, 59, rs1, rs2)
-#  define FLUSHI(rs1, im)              f3i(2, 0, 59, rs1, imm)
-#  define nop(i0)                      _nop(_jit, i0)
-static void _nop(jit_state_t*, int32_t);
-#  define movr(r0, r1)                 _movr(_jit, r0, r1)
-static void _movr(jit_state_t*, int32_t, int32_t);
-#  define movi(r0, i0)                 _movi(_jit, r0, i0)
-static void _movi(jit_state_t*, int32_t, jit_word_t);
-#  define movi_p(r0, i0)               _movi_p(_jit, r0, i0)
-static jit_word_t _movi_p(jit_state_t*, int32_t, jit_word_t);
-#  define comr(r0, r1)                 XNOR(r1, 0, r0)
-#  define negr(r0, r1)                 NEG(r1, r0)
-#  define addr(r0, r1, r2)             ADD(r1, r2, r0)
-#  define addi(r0, r1, i0)             _addi(_jit, r0, r1, i0)
-static void _addi(jit_state_t*, int32_t, int32_t, jit_word_t);
-#  if __WORDSIZE == 32
-#    define addcr(r0, r1, r2)          ADDcc(r1, r2, r0)
-#  else
-#    define addcr(r0, r1, r2)          _addcr(_jit, r0, r1, r2)
-static void _addcr(jit_state_t*, int32_t, int32_t, int32_t);
-#  endif
-#  define addci(r0, r1, i0)            _addci(_jit, r0, r1, i0)
-static void _addci(jit_state_t*, int32_t, int32_t, jit_word_t);
-#  if __WORDSIZE == 32
-#    define addxr(r0, r1, r2)          ADDXcc(r1, r2, r0)
-#  else
-#    define addxr(r0, r1, r2)          _addxr(_jit, r0, r1, r2)
-static void _addxr(jit_state_t*, int32_t, int32_t, int32_t);
-#  endif
-#  define addxi(r0, r1, i0)            _addxi(_jit, r0, r1, i0)
-static void _addxi(jit_state_t*, int32_t, int32_t, jit_word_t);
-#  define subr(r0, r1, r2)             SUB(r1, r2, r0)
-#  define subi(r0, r1, i0)             _subi(_jit, r0, r1, i0)
-static void _subi(jit_state_t*, int32_t, int32_t, jit_word_t);
-#  if __WORDSIZE == 32
-#    define subcr(r0, r1, r2)          SUBcc(r1, r2, r0)
-#  else
-#    define subcr(r0, r1, r2)          _subcr(_jit, r0, r1, r2)
-static void _subcr(jit_state_t*, int32_t, int32_t, int32_t);
-#  endif
-#  define subci(r0, r1, i0)            _subci(_jit, r0, r1, i0)
-static void _subci(jit_state_t*, int32_t, int32_t, jit_word_t);
-#  if __WORDSIZE == 32
-#    define subxr(r0, r1, r2)          SUBXcc(r1, r2, r0)
-#  else
-#    define subxr(r0, r1, r2)          _subxr(_jit, r0, r1, r2)
-static void _subxr(jit_state_t*, int32_t, int32_t, int32_t);
-#  endif
-#  define subxi(r0, r1, i0)            _subxi(_jit, r0, r1, i0)
-static void _subxi(jit_state_t*, int32_t, int32_t, jit_word_t);
-#  define rsbi(r0, r1, i0)             _rsbi(_jit, r0, r1, i0)
-static void _rsbi(jit_state_t*,int32_t,int32_t,jit_word_t);
-#  if __WORDSIZE == 32
-#    define mulr(r0, r1, r2)           UMUL(r1, r2, r0)
-#  else
-#    define mulr(r0, r1, r2)           MULX(r1, r2, r0)
-#  endif
-#  define muli(r0, r1, i0)             _muli(_jit, r0, r1, i0)
-static void _muli(jit_state_t*, int32_t, int32_t, jit_word_t);
-#  if __WORDSIZE == 32
-#    define qmulr(r0,r1,r2,r3)         iqmulr(r0,r1,r2,r3,1)
-#    define qmulr_u(r0,r1,r2,r3)       iqmulr(r0,r1,r2,r3,0)
-#    define iqmulr(r0,r1,r2,r3,cc)     _iqmulr(_jit,r0,r1,r2,r3,cc)
-static void _iqmulr(jit_state_t*,int32_t,int32_t,
-                   int32_t,int32_t,jit_bool_t);
-#  define qmuli(r0,r1,r2,i0)           iqmuli(r0,r1,r2,i0,1)
-#  define qmuli_u(r0,r1,r2,i0)         iqmuli(r0,r1,r2,i0,0)
-#  define iqmuli(r0,r1,r2,i0,cc)       _iqmuli(_jit,r0,r1,r2,i0,cc)
-static void _iqmuli(jit_state_t*,int32_t,int32_t,
-                   int32_t,jit_word_t,jit_bool_t);
-#  else
-#    define qmulr(r0,r1,r2,r3)         _qmulr(_jit,r0,r1,r2,r3)
-static void _qmulr(jit_state_t*,int32_t,int32_t,
-                  int32_t,int32_t);
-#  define qmuli(r0,r1,r2,i0)           _qmuli(_jit,r0,r1,r2,i0)
-static void _qmuli(jit_state_t*,int32_t,int32_t,
-                  int32_t,jit_word_t);
-#    define qmulr_u(r0,r1,r2,r3)       _qmulr_u(_jit,r0,r1,r2,r3)
-static void _qmulr_u(jit_state_t*,int32_t,int32_t,
-                    int32_t,int32_t);
-#  define qmuli_u(r0,r1,r2,i0)         _qmuli_u(_jit,r0,r1,r2,i0)
-static void _qmuli_u(jit_state_t*,int32_t,int32_t,
-                    int32_t,jit_word_t);
-#  endif
-#  define divr(r0, r1, r2)             _divr(_jit, r0, r1, r2)
-static void _divr(jit_state_t*, int32_t, int32_t, int32_t);
-#  define divi(r0, r1, i0)             _divi(_jit, r0, r1, i0)
-static void _divi(jit_state_t*, int32_t, int32_t, jit_word_t);
-#  define divr_u(r0, r1, r2)           _divr_u(_jit, r0, r1, r2)
-static void _divr_u(jit_state_t*, int32_t, int32_t, int32_t);
-#  define divi_u(r0, r1, i0)           _divi_u(_jit, r0, r1, i0)
-static void _divi_u(jit_state_t*, int32_t, int32_t, jit_word_t);
-#  define qdivr(r0,r1,r2,r3)           iqdivr(r0,r1,r2,r3,1)
-#  define qdivr_u(r0,r1,r2,r3)         iqdivr(r0,r1,r2,r3,0)
-#  define iqdivr(r0,r1,r2,r3,cc)       _iqdivr(_jit,r0,r1,r2,r3,cc)
-static void _iqdivr(jit_state_t*,int32_t,int32_t,
-                   int32_t,int32_t,jit_bool_t);
-#  define qdivi(r0,r1,r2,i0)           iqdivi(r0,r1,r2,i0,1)
-#  define qdivi_u(r0,r1,r2,i0)         iqdivi(r0,r1,r2,i0,0)
-#  define iqdivi(r0,r1,r2,i0,cc)       _iqdivi(_jit,r0,r1,r2,i0,cc)
-static void _iqdivi(jit_state_t*,int32_t,int32_t,
-                   int32_t,jit_word_t,jit_bool_t);
-#  define remr(r0, r1, r2)             _remr(_jit, r0, r1, r2)
-static void _remr(jit_state_t*, int32_t, int32_t, int32_t);
-#  define remi(r0, r1, i0)             _remi(_jit, r0, r1, i0)
-static void _remi(jit_state_t*, int32_t, int32_t, jit_word_t);
-#  define remr_u(r0, r1, r2)           _remr_u(_jit, r0, r1, r2)
-static void _remr_u(jit_state_t*, int32_t, int32_t, int32_t);
-#  define remi_u(r0, r1, i0)           _remi_u(_jit, r0, r1, i0)
-static void _remi_u(jit_state_t*, int32_t, int32_t, jit_word_t);
-#  define andr(r0, r1, r2)             AND(r1, r2, r0)
-#  define andi(r0, r1, i0)             _andi(_jit, r0, r1, i0)
-static void _andi(jit_state_t*, int32_t, int32_t, jit_word_t);
-#  define orr(r0, r1, r2)              OR(r1, r2, r0)
-#  define ori(r0, r1, i0)              _ori(_jit, r0, r1, i0)
-static void _ori(jit_state_t*, int32_t, int32_t, jit_word_t);
-#  define xorr(r0, r1, r2)             XOR(r1, r2, r0)
-#  define xori(r0, r1, i0)             _xori(_jit, r0, r1, i0)
-static void _xori(jit_state_t*, int32_t, int32_t, jit_word_t);
-#  if __WORDSIZE == 32
-#    define lshr(r0, r1, r2)           SLL(r1, r2, r0)
-#    define lshi(r0, r1, i0)           SLLI(r1, i0, r0)
-#    define rshr(r0, r1, r2)           SRA(r1, r2, r0)
-#    define rshi(r0, r1, i0)           SRAI(r1, i0, r0)
-#    define rshr_u(r0, r1, r2)         SRL(r1, r2, r0)
-#    define rshi_u(r0, r1, i0)         SRLI(r1, i0, r0)
-#  else
-#    define lshr(r0, r1, r2)           SLLX(r1, r2, r0)
-#    define lshi(r0, r1, i0)           SLLXI(r1, i0, r0)
-#    define rshr(r0, r1, r2)           SRAX(r1, r2, r0)
-#    define rshi(r0, r1, i0)           SRAXI(r1, i0, r0)
-#    define rshr_u(r0, r1, r2)         SRLX(r1, r2, r0)
-#    define rshi_u(r0, r1, i0)         SRLXI(r1, i0, r0)
-#  endif
-#  define bswapr_us(r0,r1)             extr_us(r0,r1)
-#  define extr_c(r0,r1)                        _extr_c(_jit,r0,r1)
-static void _extr_c(jit_state_t*,int32_t,int32_t);
-#  define extr_uc(r0,r1)               andi(r0, r1, 0xff)
-#  define extr_s(r0,r1)                        _extr_s(_jit,r0,r1)
-static void _extr_s(jit_state_t*,int32_t,int32_t);
-#  define extr_us(r0,r1)               _extr_us(_jit,r0,r1)
-static void _extr_us(jit_state_t*,int32_t,int32_t);
-#  if __WORDSIZE == 32
-#    define bswapr_ui(r0,r1)           movr(r0,r1)
-#  else
-#    define bswapr_ui(r0,r1)           extr_ui(r0,r1)
-#    define bswapr_ul(r0,r1)           movr(r0,r1)
-#    define extr_i(r0,r1)              _extr_i(_jit,r0,r1)
-static void _extr_i(jit_state_t*,int32_t,int32_t);
-#    define extr_ui(r0,r1)             _extr_ui(_jit,r0,r1)
-static void _extr_ui(jit_state_t*,int32_t,int32_t);
-#  endif
-#  define cr(cc, r0, r1, r2)           _cr(_jit, cc, r0, r1, r2)
-static void _cr(jit_state_t*,int32_t,int32_t,int32_t,int32_t);
-#  define cw(cc, r0, r1, i0)           _cw(_jit, cc, r0, r1, i0)
-static void _cw(jit_state_t*,int32_t,int32_t,int32_t,jit_word_t);
-#  if __WORDSIZE == 32
-#    define ltr(r0, r1, r2)            cr(SPARC_BL, r0, r1, r2)
-#    define lti(r0, r1, i0)            cw(SPARC_BL, r0, r1, i0)
-#    define ltr_u(r0, r1, r2)          cr(SPARC_BLU, r0, r1, r2)
-#    define lti_u(r0, r1, i0)          cw(SPARC_BLU, r0, r1, i0)
-#    define ler(r0, r1, r2)            cr(SPARC_BLE, r0, r1, r2)
-#    define lei(r0, r1, i0)            cw(SPARC_BLE, r0, r1, i0)
-#    define ler_u(r0, r1, r2)          cr(SPARC_BLEU, r0, r1, r2)
-#    define lei_u(r0, r1, i0)          cw(SPARC_BLEU, r0, r1, i0)
-#    define eqr(r0, r1, r2)            cr(SPARC_BE, r0, r1, r2)
-#    define eqi(r0, r1, i0)            cw(SPARC_BE, r0, r1, i0)
-#    define ger(r0, r1, r2)            cr(SPARC_BGE, r0, r1, r2)
-#    define gei(r0, r1, i0)            cw(SPARC_BGE, r0, r1, i0)
-#    define ger_u(r0, r1, r2)          cr(SPARC_BGEU, r0, r1, r2)
-#    define gei_u(r0, r1, i0)          cw(SPARC_BGEU, r0, r1, i0)
-#    define gtr(r0, r1, r2)            cr(SPARC_BG, r0, r1, r2)
-#    define gti(r0, r1, i0)            cw(SPARC_BG, r0, r1, i0)
-#    define gtr_u(r0, r1, r2)          cr(SPARC_BGU, r0, r1, r2)
-#    define gti_u(r0, r1, i0)          cw(SPARC_BGU, r0, r1, i0)
-#    define ner(r0, r1, r2)            cr(SPARC_BNE, r0, r1, r2)
-#    define nei(r0, r1, i0)            cw(SPARC_BNE, r0, r1, i0)
-#  else
-#  define ltr(r0, r1, r2)              cr(SPARC_BPL, r0, r1, r2)
-#  define lti(r0, r1, i0)              cw(SPARC_BPL, r0, r1, i0)
-#  define ltr_u(r0, r1, r2)            cr(SPARC_BPCS, r0, r1, r2)
-#  define lti_u(r0, r1, i0)            cw(SPARC_BPCS, r0, r1, i0)
-#  define ler(r0, r1, r2)              cr(SPARC_BPLE, r0, r1, r2)
-#  define lei(r0, r1, i0)              cw(SPARC_BPLE, r0, r1, i0)
-#  define ler_u(r0, r1, r2)            cr(SPARC_BPLEU, r0, r1, r2)
-#  define lei_u(r0, r1, i0)            cw(SPARC_BPLEU, r0, r1, i0)
-#  define eqr(r0, r1, r2)              cr(SPARC_BPE, r0, r1, r2)
-#  define eqi(r0, r1, i0)              cw(SPARC_BPE, r0, r1, i0)
-#  define ger(r0, r1, r2)              cr(SPARC_BPGE, r0, r1, r2)
-#  define gei(r0, r1, i0)              cw(SPARC_BPGE, r0, r1, i0)
-#  define ger_u(r0, r1, r2)            cr(SPARC_BPCC, r0, r1, r2)
-#  define gei_u(r0, r1, i0)            cw(SPARC_BPCC, r0, r1, i0)
-#  define gtr(r0, r1, r2)              cr(SPARC_BPG, r0, r1, r2)
-#  define gti(r0, r1, i0)              cw(SPARC_BPG, r0, r1, i0)
-#  define gtr_u(r0, r1, r2)            cr(SPARC_BPGU, r0, r1, r2)
-#  define gti_u(r0, r1, i0)            cw(SPARC_BPGU, r0, r1, i0)
-#  define ner(r0, r1, r2)              cr(SPARC_BPNE, r0, r1, r2)
-#  define nei(r0, r1, i0)              cw(SPARC_BPNE, r0, r1, i0)
-#  endif
-#  define ldr_c(r0, r1)                        LDSB(r1, 0, r0)
-#  define ldi_c(r0, i0)                        _ldi_c(_jit, r0, i0)
-static void _ldi_c(jit_state_t*,int32_t,jit_word_t);
-#  define ldr_uc(r0, r1)               LDUB(r1, 0, r0)
-#  define ldi_uc(r0, i0)               _ldi_uc(_jit, r0, i0)
-static void _ldi_uc(jit_state_t*,int32_t,jit_word_t);
-#  define ldr_s(r0, r1)                        LDSH(r1, 0, r0)
-#  define ldi_s(r0, i0)                        _ldi_s(_jit, r0, i0)
-static void _ldi_s(jit_state_t*,int32_t,jit_word_t);
-#  define ldr_us(r0, r1)               LDUH(r1, 0, r0)
-#  define ldi_us(r0, i0)               _ldi_us(_jit, r0, i0)
-static void _ldi_us(jit_state_t*,int32_t,jit_word_t);
-#  if __WORDSIZE == 32
-#    define ldr_i(r0, r1)              LD(r1, 0, r0)
-#    define ldr(u, v)                  ldr_i(u, v)
-#    define ldi(u, v)                  ldi_i(u, v)
-#  else
-#    define ldr_i(r0, r1)              LDSW(r1, 0, r0)
-#    define ldr_ui(r0, r1)             LDUW(r1, 0, r0)
-#    define ldr_l(r0, r1)              LDX(r1, 0, r0)
-#    define ldr(u, v)                  ldr_l(u, v)
-#    define ldi(u, v)                  ldi_l(u, v)
-#  endif
-#  define ldi_i(r0, i0)                        _ldi_i(_jit, r0, i0)
-static void _ldi_i(jit_state_t*,int32_t,jit_word_t);
-#  if __WORDSIZE == 64
-#    define ldi_ui(r0, i0)             _ldi_ui(_jit, r0, i0)
-static void _ldi_ui(jit_state_t*,int32_t,jit_word_t);
-#    define ldi_l(r0, i0)              _ldi_l(_jit, r0, i0)
-static void _ldi_l(jit_state_t*,int32_t,jit_word_t);
-#  endif
-#  define ldxr_c(r0, r1, r2)           LDSB(r1, r2, r0)
-#  define ldxi_c(r0, r1, i0)           _ldxi_c(_jit, r0, r1, i0)
-static void _ldxi_c(jit_state_t*,int32_t,int32_t,jit_word_t);
-#  define ldxr_uc(r0, r1, r2)          LDUB(r1, r2, r0)
-#  define ldxi_uc(r0, r1, i0)          _ldxi_uc(_jit, r0, r1, i0)
-static void _ldxi_uc(jit_state_t*,int32_t,int32_t,jit_word_t);
-#  define ldxr_s(r0, r1, r2)           LDSH(r1, r2, r0)
-#  define ldxi_s(r0, r1, i0)           _ldxi_s(_jit, r0, r1, i0)
-static void _ldxi_s(jit_state_t*,int32_t,int32_t,jit_word_t);
-#  define ldxr_us(r0, r1, r2)          LDUH(r1, r2, r0)
-#  define ldxi_us(r0, r1, i0)          _ldxi_us(_jit, r0, r1, i0)
-static void _ldxi_us(jit_state_t*,int32_t,int32_t,jit_word_t);
-#  if __WORDSIZE == 32
-#    define ldxr(u, v, w)              ldxr_i(u, v, w)
-#    define ldxr_i(r0, r1, r2)         LD(r1, r2, r0)
-#    define ldxi(u, v, w)              ldxi_i(u, v, w)
-#  else
-#    define ldxr(u, v, w)              ldxr_l(u, v, w)
-#    define ldxr_i(r0, r1, r2)         LDSW(r1, r2, r0)
-#    define ldxr_ui(r0, r1, r2)                LDUW(r1, r2, r0)
-#    define ldxr_l(r0, r1, r2)         LDX(r1, r2, r0)
-#    define ldxi(u, v, w)              ldxi_l(u, v, w)
-#  endif
-#  define ldxi_i(r0, r1, i0)           _ldxi_i(_jit, r0, r1, i0)
-static void _ldxi_i(jit_state_t*,int32_t,int32_t,jit_word_t);
-#  if __WORDSIZE == 64
-#    define ldxi_ui(r0, r1, i0)                _ldxi_ui(_jit, r0, r1, i0)
-static void _ldxi_ui(jit_state_t*,int32_t,int32_t,jit_word_t);
-#    define ldxi_l(r0, r1, i0)         _ldxi_l(_jit, r0, r1, i0)
-static void _ldxi_l(jit_state_t*,int32_t,int32_t,jit_word_t);
-#  endif
-#  define str_c(r0, r1)                        STB(r1, r0, 0)
-#  define sti_c(i0, r0)                        _sti_c(_jit, i0, r0)
-static void _sti_c(jit_state_t*,jit_word_t,int32_t);
-#  define str_s(r0, r1)                        STH(r1, r0, 0)
-#  define sti_s(i0, r0)                        _sti_s(_jit, i0, r0)
-static void _sti_s(jit_state_t*,jit_word_t,int32_t);
-#  if __WORDSIZE == 32
-#    define str(u, v)                  str_i(u, v)
-#    define str_i(r0, r1)              STI(r1, r0, 0)
-#    define sti(u, v)                  sti_i(u, v)
-#  else
-#    define str(u, v)                  str_l(u, v)
-#    define str_i(r0, r1)              STW(r1, r0, 0)
-#    define str_l(r0, r1)              STX(r1, r0, 0)
-#    define sti(u, v)                  sti_l(u, v)
-#  endif
-#  define sti_i(i0, r0)                        _sti_i(_jit, i0, r0)
-static void _sti_i(jit_state_t*,jit_word_t,int32_t);
-#  if __WORDSIZE == 64
-#    define sti_l(i0, r0)              _sti_l(_jit, i0, r0)
-static void _sti_l(jit_state_t*,jit_word_t,int32_t);
-#  endif
-#  define stxr_c(r0, r1, r2)           STB(r2, r1, r0)
-#  define stxi_c(i0, r0, r1)           _stxi_c(_jit, i0, r0, r1)
-static void _stxi_c(jit_state_t*,jit_word_t,int32_t,int32_t);
-#  define stxr_s(r0, r1, r2)           STH(r2, r1, r0)
-#  define stxi_s(i0, r0, r1)           _stxi_s(_jit, i0, r0, r1)
-static void _stxi_s(jit_state_t*,jit_word_t,int32_t,int32_t);
-#  if __WORDSIZE == 32
-#    define stxr(u, v, w)              stxr_i(u, v, w)
-#    define stxr_i(r0, r1, r2)         ST(r2, r1, r0)
-#    define stxi(u, v, w)              stxi_i(u, v, w)
-#  else
-#    define stxr(u, v, w)              stxr_l(u, v, w)
-#    define stxr_i(r0, r1, r2)         STW(r2, r1, r0)
-#    define stxi(u, v, w)              stxi_l(u, v, w)
-#    define stxr_l(r0, r1, r2)         STX(r2, r1, r0)
-#  endif
-#  define stxi_i(i0, r0, r1)           _stxi_i(_jit, i0, r0, r1)
-static void _stxi_i(jit_state_t*,jit_word_t,int32_t,int32_t);
-#  if __WORDSIZE == 64
-#    define stxi_l(i0, r0, r1)         _stxi_l(_jit, i0, r0, r1)
-static void _stxi_l(jit_state_t*,jit_word_t,int32_t,int32_t);
-#  endif
-#  define br(cc, i0, r0, r1)           _br(_jit, cc, i0, r0, r1)
-static jit_word_t
-_br(jit_state_t*,int32_t,jit_word_t,int32_t,int32_t);
-#  define bw(cc, i0, r0, i1)           _bw(_jit, cc, i0, r0, i1)
-static jit_word_t
-_bw(jit_state_t*,int32_t,jit_word_t,int32_t,jit_word_t);
-#  if __WORDSIZE == 32
-#    define bltr(i0, r0, r1)           br(SPARC_BL, i0, r0, r1)
-#    define blti(i0, r0, i1)           bw(SPARC_BL, i0, r0, i1)
-#    define bltr_u(i0, r0, r1)         br(SPARC_BLU, i0, r0, r1)
-#    define blti_u(i0, r0, i1)         bw(SPARC_BLU, i0, r0, i1)
-#    define bler(i0, r0, r1)           br(SPARC_BLE, i0, r0, r1)
-#    define blei(i0, r0, i1)           bw(SPARC_BLE, i0, r0, i1)
-#    define bler_u(i0, r0, r1)         br(SPARC_BLEU, i0, r0, r1)
-#    define blei_u(i0, r0, i1)         bw(SPARC_BLEU, i0, r0, i1)
-#    define beqr(i0, r0, r1)           br(SPARC_BE, i0, r0, r1)
-#    define beqi(i0, r0, i1)           bw(SPARC_BE, i0, r0, i1)
-#    define bger(i0, r0, r1)           br(SPARC_BGE, i0, r0, r1)
-#    define bgei(i0, r0, i1)           bw(SPARC_BGE, i0, r0, i1)
-#    define bger_u(i0, r0, r1)         br(SPARC_BGEU, i0, r0, r1)
-#    define bgei_u(i0, r0, i1)         bw(SPARC_BGEU, i0, r0, i1)
-#    define bgtr(i0, r0, r1)           br(SPARC_BG, i0, r0, r1)
-#    define bgti(i0, r0, i1)           bw(SPARC_BG, i0, r0, i1)
-#    define bgtr_u(i0, r0, r1)         br(SPARC_BGU, i0, r0, r1)
-#    define bgti_u(i0, r0, i1)         bw(SPARC_BGU, i0, r0, i1)
-#    define bner(i0, r0, r1)           br(SPARC_BNE, i0, r0, r1)
-#    define bnei(i0, r0, i1)           bw(SPARC_BNE, i0, r0, i1)
-#  else
-#    define bltr(i0, r0, r1)           br(SPARC_BPL, i0, r0, r1)
-#    define blti(i0, r0, i1)           bw(SPARC_BPL, i0, r0, i1)
-#    define bltr_u(i0, r0, r1)         br(SPARC_BPCS, i0, r0, r1)
-#    define blti_u(i0, r0, i1)         bw(SPARC_BPCS, i0, r0, i1)
-#    define bler(i0, r0, r1)           br(SPARC_BPLE, i0, r0, r1)
-#    define blei(i0, r0, i1)           bw(SPARC_BPLE, i0, r0, i1)
-#    define bler_u(i0, r0, r1)         br(SPARC_BPLEU, i0, r0, r1)
-#    define blei_u(i0, r0, i1)         bw(SPARC_BPLEU, i0, r0, i1)
-#    define beqr(i0, r0, r1)           br(SPARC_BPE, i0, r0, r1)
-#    define beqi(i0, r0, i1)           bw(SPARC_BPE, i0, r0, i1)
-#    define bger(i0, r0, r1)           br(SPARC_BPGE, i0, r0, r1)
-#    define bgei(i0, r0, i1)           bw(SPARC_BPGE, i0, r0, i1)
-#    define bger_u(i0, r0, r1)         br(SPARC_BPCC, i0, r0, r1)
-#    define bgei_u(i0, r0, i1)         bw(SPARC_BPCC, i0, r0, i1)
-#    define bgtr(i0, r0, r1)           br(SPARC_BPG, i0, r0, r1)
-#    define bgti(i0, r0, i1)           bw(SPARC_BPG, i0, r0, i1)
-#    define bgtr_u(i0, r0, r1)         br(SPARC_BPGU, i0, r0, r1)
-#    define bgti_u(i0, r0, i1)         bw(SPARC_BPGU, i0, r0, i1)
-#    define bner(i0, r0, r1)           br(SPARC_BPNE, i0, r0, r1)
-#    define bnei(i0, r0, i1)           bw(SPARC_BPNE, i0, r0, i1)
-#  endif
-#  define b_asr(jif,add,sgn,i0,r0,r1)  _b_asr(_jit,jif,add,sgn,i0,r0,r1)
-static jit_word_t
-_b_asr(jit_state_t*,jit_bool_t,jit_bool_t,jit_bool_t,
-       jit_word_t,int32_t,int32_t);
-#  define b_asw(jif,add,sgn,i0,r0,i1)  _b_asw(_jit,jif,add,sgn,i0,r0,i1)
-static jit_word_t
-_b_asw(jit_state_t*,jit_bool_t,jit_bool_t,jit_bool_t,
-       jit_word_t,int32_t,jit_word_t);
-#  define boaddr(i0, r0, r1)           b_asr(1, 1, 1, i0, r0, r1)
-#  define boaddi(i0, r0, i1)           b_asw(1, 1, 1, i0, r0, i1)
-#  define boaddr_u(i0, r0, r1)         b_asr(1, 1, 0, i0, r0, r1)
-#  define boaddi_u(i0, r0, i1)         b_asw(1, 1, 0, i0, r0, i1)
-#  define bxaddr(i0, r0, r1)           b_asr(0, 1, 1, i0, r0, r1)
-#  define bxaddi(i0, r0, i1)           b_asw(0, 1, 1, i0, r0, i1)
-#  define bxaddr_u(i0, r0, r1)         b_asr(0, 1, 0, i0, r0, r1)
-#  define bxaddi_u(i0, r0, i1)         b_asw(0, 1, 0, i0, r0, i1)
-#  define bosubr(i0, r0, r1)           b_asr(1, 0, 1, i0, r0, r1)
-#  define bosubi(i0, r0, i1)           b_asw(1, 0, 1, i0, r0, i1)
-#  define bosubr_u(i0, r0, r1)         b_asr(1, 0, 0, i0, r0, r1)
-#  define bosubi_u(i0, r0, i1)         b_asw(1, 0, 0, i0, r0, i1)
-#  define bxsubr(i0, r0, r1)           b_asr(0, 0, 1, i0, r0, r1)
-#  define bxsubi(i0, r0, i1)           b_asw(0, 0, 1, i0, r0, i1)
-#  define bxsubr_u(i0, r0, r1)         b_asr(0, 0, 0, i0, r0, r1)
-#  define bxsubi_u(i0, r0, i1)         b_asw(0, 0, 0, i0, r0, i1)
-#  define bm_r(set, i0, r0, r1)                _bm_r(_jit,set,i0,r0,r1)
-static jit_word_t
-_bm_r(jit_state_t*,jit_bool_t,jit_word_t,int32_t,int32_t);
-#  define bm_w(set,i0,r0,i1)           _bm_w(_jit,set,i0,r0,i1)
-static jit_word_t
-_bm_w(jit_state_t*,jit_bool_t,jit_word_t,int32_t,jit_word_t);
-#  define bmsr(i0, r0, r1)             bm_r(1, i0, r0, r1)
-#  define bmsi(i0, r0, i1)             bm_w(1, i0, r0, i1)
-#  define bmcr(i0, r0, r1)             bm_r(0, i0, r0, r1)
-#  define bmci(i0, r0, i1)             bm_w(0, i0, r0, i1)
-#  define jmpr(r0)                     _jmpr(_jit, r0)
-static void _jmpr(jit_state_t*,int32_t);
-#  define jmpi(i0)                     _jmpi(_jit, i0)
-static void _jmpi(jit_state_t*,jit_word_t);
-#  define jmpi_p(i0)                   _jmpi_p(_jit, i0)
-static jit_word_t _jmpi_p(jit_state_t*,jit_word_t);
-#  define callr(r0)                    _callr(_jit, r0)
-static void _callr(jit_state_t*,int32_t);
-#  define calli(i0)                    _calli(_jit, i0)
-static void _calli(jit_state_t*,jit_word_t);
-#  define calli_p(i0)                  _calli_p(_jit, i0)
-static jit_word_t _calli_p(jit_state_t*,jit_word_t);
-#  define prolog(node)                 _prolog(_jit, node)
-static void _prolog(jit_state_t*,jit_node_t*);
-#  define epilog(node)                 _epilog(_jit, node)
-static void _epilog(jit_state_t*,jit_node_t*);
-#define vastart(r0)                    _vastart(_jit, r0)
-static void _vastart(jit_state_t*, int32_t);
-#define vaarg(r0, r1)                  _vaarg(_jit, r0, r1)
-static void _vaarg(jit_state_t*, int32_t, int32_t);
-#define patch_at(jump, label)          _patch_at(_jit, jump, label)
-static void _patch_at(jit_state_t*,jit_word_t,jit_word_t);
-#endif
-
-#if CODE
-static void
-_f2r(jit_state_t *_jit,
-     int32_t op, int32_t rd, int32_t op2, int32_t imm22)
-{
-    jit_instr_t                v;
-    assert(!(op  & 0xfffffffc));
-    assert(!(rd  & 0xffffffe0));
-    assert(!(op2 & 0xfffffff8));
-    assert(s22_p(imm22));
-    v.op.b    = op;
-    v.rd.b    = rd;
-    v.op2.b   = op2;
-    v.imm22.b = imm22;
-    ii(v.v);
-}
-
-static void
-_f2b(jit_state_t *_jit,
-     int32_t op, int32_t a, int32_t cond, int32_t op2,
-     int32_t disp22)
-{
-    jit_instr_t                v;
-    assert(!(op   & 0xfffffffc));
-    assert(!(a    & 0xfffffffe));
-    assert(!(cond & 0xfffffff0));
-    assert(!(op2  & 0xfffffff8));
-    assert(s22_p(disp22));
-    v.op.b     = op;
-    v.a.b      = a;
-    v.cond.b   = cond;
-    v.op2.b    = op2;
-    v.disp22.b = disp22;
-    ii(v.v);
-}
-
-#  if __WORDSIZE == 64
-static void
-_f2bp(jit_state_t *_jit,
-      int32_t op, int32_t a, int32_t cond, int32_t op2,
-      int32_t cc1, int32_t cc0, int32_t p, int32_t disp19)
-{
-    jit_instr_t                v;
-    assert(!(op   & 0xfffffffc));
-    assert(!(a    & 0xfffffffe));
-    assert(!(cond & 0xfffffff0));
-    assert(!(op2  & 0xfffffff8));
-    assert(s19_p(disp19));
-    v.op.b     = op;
-    v.a.b      = a;
-    v.cond.b   = cond;
-    v.op2.b    = op2;
-    v.cc1.b    = cc1;
-    v.cc0.b    = cc0;
-    v.p.b      = p;
-    v.disp19.b = disp19;
-    ii(v.v);
-}
-#  endif
-
-static void
-_f3r(jit_state_t *_jit, int32_t op, int32_t rd,
-     int32_t op3, int32_t rs1, int32_t rs2)
-{
-    jit_instr_t                v;
-    assert(!(op  & 0xfffffffc));
-    assert(!(rd  & 0xffffffe0));
-    assert(!(op3 & 0xffffffc0));
-    assert(!(rs1 & 0xffffffe0));
-    assert(!(rs2 & 0xffffffe0));
-    v.op.b  = op;
-    v.rd.b  = rd;
-    v.op3.b = op3;
-    v.rs1.b = rs1;
-    v.i.b   = 0;
-    v.asi.b = 0;
-    v.rs2.b = rs2;
-    ii(v.v);
-}
-
-#  if __WORDSIZE == 64
-static void
-_f3rx(jit_state_t *_jit, int32_t op, int32_t rd,
-      int32_t op3, int32_t rs1, int32_t rs2)
-{
-    jit_instr_t                v;
-    assert(!(op  & 0xfffffffc));
-    assert(!(rd  & 0xffffffe0));
-    assert(!(op3 & 0xffffffc0));
-    assert(!(rs1 & 0xffffffe0));
-    assert(!(rs2 & 0xffffffe0));
-    v.op.b   = op;
-    v.rd.b   = rd;
-    v.op3.b  = op3;
-    v.rs1.b  = rs1;
-    v.i.b    = 0;
-    v.x.b    = 1;
-    v.asix.b = 0;
-    v.rs2.b  = rs2;
-    ii(v.v);
-}
-
-static void
-_f3s(jit_state_t *_jit, int32_t op, int32_t rd,
-      int32_t op3, int32_t rs1, int32_t shim)
-{
-    jit_instr_t                v;
-    assert(!(op   & 0xfffffffc));
-    assert(!(rd   & 0xffffffe0));
-    assert(!(op3  & 0xffffffc0));
-    assert(!(rs1  & 0xffffffe0));
-    assert(!(shim & 0xffffffc0));
-    v.op.b   = op;
-    v.rd.b   = rd;
-    v.op3.b  = op3;
-    v.rs1.b  = rs1;
-    v.i.b    = 1;
-    v.x.b    = 1;
-    v.asis.b = 0;
-    v.shim.b = shim;
-    ii(v.v);
-}
-#  endif
-
-static void
-_f3i(jit_state_t *_jit, int32_t op, int32_t rd,
-     int32_t op3, int32_t rs1, int32_t simm13)
-{
-    jit_instr_t                v;
-    assert(!(op  & 0xfffffffc));
-    assert(!(rd  & 0xffffffe0));
-    assert(!(op3 & 0xffffffc0));
-    assert(!(rs1 & 0xffffffe0));
-    assert(s13_p(simm13));
-    v.op.b     = op;
-    v.rd.b     = rd;
-    v.op3.b    = op3;
-    v.rs1.b    = rs1;
-    v.i.b      = 1;
-    v.simm13.b = simm13;
-    ii(v.v);
-}
-
-static void
-_f3t(jit_state_t *_jit, int32_t cond,
-     int32_t rs1, int32_t i, int32_t rs2_imm7)
-{
-    jit_instr_t                v;
-    assert(!(cond & 0xfffffff0));
-    assert(!(i    & 0xfffffffe));
-    assert(!(rs1 & 0xffffffe0));
-    v.op.b     = 2;
-    v.rd.b     = cond;
-    v.op3.b    = 58;
-    v.i.b      = i;
-    if (i) {
-       assert(s7_p(rs2_imm7));
-       v.res.b  = 0;
-       v.imm7.b = rs2_imm7;
-    }
-    else {
-       assert(!(rs2_imm7 & 0xffffffe0));
-       v.asi.b = 0;
-       v.rs2.b = rs2_imm7;
-    }
-    ii(v.v);
-}
-
-static void
-_f3a(jit_state_t *_jit, int32_t op, int32_t rd,
-     int32_t op3, int32_t rs1, int32_t asi, int32_t rs2)
-{
-    jit_instr_t                v;
-    assert(!(op  & 0xfffffffc));
-    assert(!(rd  & 0xffffffe0));
-    assert(!(op3 & 0xffffffc0));
-    assert(!(rs1 & 0xffffffe0));
-    assert(!(asi & 0xffffff00));
-    assert(!(rs2 & 0xffffffe0));
-    v.op.b    = op;
-    v.rd.b    = rd;
-    v.op3.b   = op3;
-    v.rs1.b   = rs1;
-    v.i.b     = 0;
-    v.asi.b   = asi;
-    v.rs2.b   = rs2;
-    ii(v.v);
-}
-
-static void
-_f1(jit_state_t *_jit, int32_t op, int32_t disp30)
-{
-    jit_instr_t                v;
-    assert(!(op  & 0xfffffffc));
-    assert(s30_p(disp30));
-    v.op.b     = op;
-    v.disp30.b = disp30;
-    ii(v.v);
-}
-
-static void
-_nop(jit_state_t *_jit, int32_t i0)
-{
-    for (; i0 > 0; i0 -= 4)
-       NOP();
-    assert(i0 == 0);
-}
-
-static void
-_movr(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    if (r0 != r1)
-       ORI(r1, 0, r0);
-}
-
-static void
-_movi(jit_state_t *_jit, int32_t r0, jit_word_t i0)
-{
-    if (s13_p(i0))
-       ORI(0, i0, r0);
-    else {
-#  if __WORDSIZE == 64
-       if (i0 & 0xffffffff00000000) {
-           int32_t     reg = jit_get_reg(jit_class_gpr);
-           movi(rn(reg), (i0 >> 32) & 0xffffffff);
-           movi(r0, i0 & 0xffffffff);
-           lshi(rn(reg), rn(reg), 32);
-           OR(rn(reg), r0, r0);
-           jit_unget_reg(reg);
-       }
-       else {
-#  endif
-           SETHI(HI((int)i0), r0);
-           if (LO(i0))
-               ORI(r0, LO(i0), r0);
-#  if __WORDSIZE == 64
-       }
-#  endif
-    }
-}
-
-static jit_word_t
-_movi_p(jit_state_t *_jit, int32_t r0, jit_word_t i0)
-{
-    jit_word_t         w;
-#  if __WORDSIZE == 64
-    int32_t            reg;
-#  endif
-    w = _jit->pc.w;
-#  if __WORDSIZE == 64
-    reg = jit_get_reg(jit_class_gpr);
-    SETHI(HI((int)i0), r0);
-    ORI(r0, LO(i0), r0);
-    i0 = (int)(i0 >> 32);
-    SETHI(HI(i0), rn(reg));
-    ORI(rn(reg), LO(i0), rn(reg));
-    SLLXI(rn(reg), 32, rn(reg));
-    OR(rn(reg), r0, r0);
-    jit_unget_reg(reg);
-#  else
-    SETHI(HI(i0), r0);
-    ORI(r0, LO(i0), r0);
-#  endif
-    return (w);
-}
-
-static void
-_addi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       ADDI(r1, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       addr(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-#  if __WORDSIZE == 64
-static void
-_addcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
-    int32_t            reg;
-    if (jit_carry == _NOREG)
-       jit_carry = jit_get_reg(jit_class_gpr);
-    if (r0 == r1) {
-       reg = jit_get_reg(jit_class_gpr);
-       addr(rn(reg), r1, r2);
-       ltr_u(rn(jit_carry), rn(reg), r1);
-       movr(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-    else {
-       addr(r0, r1, r2);
-       ltr_u(rn(jit_carry), r0, r1);
-    }
-}
-#  endif
-
-static void
-_addci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-#  if __WORDSIZE == 32
-    int32_t            reg;
-    if (s13_p(i0))
-       ADDIcc(r1, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       addcr(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-#  else
-    int32_t            reg;
-    if (jit_carry == _NOREG)
-       jit_carry = jit_get_reg(jit_class_gpr);
-    if (r0 == r1) {
-       reg = jit_get_reg(jit_class_gpr);
-       addi(rn(reg), r1, i0);
-       ltr_u(rn(jit_carry), rn(reg), r1);
-       movr(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-    else {
-       addi(r0, r1, i0);
-       ltr_u(rn(jit_carry), r0, r1);
-    }
-#  endif
-}
-
-#  if __WORDSIZE == 64
-static void
-_addxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
-    int32_t            reg;
-    assert(jit_carry != _NOREG);
-    reg = jit_get_reg(jit_class_gpr);
-    movr(rn(reg), rn(jit_carry));
-    addcr(r0, r1, r2);
-    addcr(r0, r0, rn(reg));
-    jit_unget_reg(reg);
-}
-#  endif
-
-static void
-_addxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-#  if __WORDSIZE == 32
-    int32_t            reg;
-    if (s13_p(i0))
-       ADDXIcc(r1, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       addxr(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-#  else
-    int32_t            reg;
-    assert(jit_carry != _NOREG);
-    reg = jit_get_reg(jit_class_gpr);
-    movr(rn(reg), rn(jit_carry));
-    addci(r0, r1, i0);
-    addcr(r0, r0, rn(reg));
-    jit_unget_reg(reg);
-#  endif
-}
-
-static void
-_subi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       SUBI(r1, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       subr(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-#  if __WORDSIZE == 64
-static void
-_subcr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
-    int32_t            reg;
-    if (jit_carry == _NOREG)
-       jit_carry = jit_get_reg(jit_class_gpr);
-    if (r0 == r1) {
-       reg = jit_get_reg(jit_class_gpr);
-       subr(rn(reg), r1, r2);
-       ltr_u(rn(jit_carry), r1, rn(reg));
-       movr(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-    else {
-       subr(r0, r1, r2);
-       ltr_u(rn(jit_carry), r1, r0);
-    }
-}
-#  endif
-
-static void
-_subci(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-#  if __WORDSIZE == 32
-    int32_t            reg;
-    if (s13_p(i0))
-       SUBIcc(r1, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       subcr(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-#  else
-    int32_t            reg;
-    if (jit_carry == _NOREG)
-       jit_carry = jit_get_reg(jit_class_gpr);
-    if (r0 == r1) {
-       reg = jit_get_reg(jit_class_gpr);
-       addi(rn(reg), r1, -i0);
-       ltr_u(rn(jit_carry), r1, rn(reg));
-       movr(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-    else {
-       addi(r0, r1, -i0);
-       ltr_u(rn(jit_carry), r1, r0);
-    }
-#  endif
-}
-
-#  if __WORDSIZE == 64
-static void
-_subxr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
-    int32_t            reg;
-    assert(jit_carry != _NOREG);
-    reg = jit_get_reg(jit_class_gpr);
-    movr(rn(reg), rn(jit_carry));
-    subcr(r0, r1, r2);
-    subcr(r0, r0, rn(reg));
-    jit_unget_reg(reg);
-}
-#endif
-
-static void
-_subxi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-#  if __WORDSIZE == 32
-    int32_t            reg;
-    if (s13_p(i0))
-       SUBXIcc(r1, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       subxr(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-#  else
-    int32_t            reg;
-    assert(jit_carry != _NOREG);
-    reg = jit_get_reg(jit_class_gpr);
-    movr(rn(reg), rn(jit_carry));
-    subci(r0, r1, i0);
-    subcr(r0, r0, rn(reg));
-    jit_unget_reg(reg);
-#  endif
-}
-
-static void
-_rsbi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    subi(r0, r1, i0);
-    negr(r0, r0);
-}
-
-static void
-_muli(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0)) {
-#  if __WORDSIZE == 32
-       UMULI(r1, i0, r0);
-#  else
-       MULXI(r1, i0, r0);
-#  endif
-    }
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       mulr(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-#  if __WORDSIZE == 32
-static void
-_iqmulr(jit_state_t *_jit, int32_t r0, int32_t r1,
-       int32_t r2, int32_t r3, jit_bool_t sign)
-{
-    if (sign)
-       SMUL(r2, r3, r0);
-    else
-       UMUL(r2, r3, r0);
-    RDY(r1);
-}
-
-static void
-_iqmuli(jit_state_t *_jit, int32_t r0, int32_t r1,
-       int32_t r2, jit_word_t i0, jit_bool_t sign)
-{
-    int32_t            reg;
-    if (s13_p(i0)) {
-       if (sign)
-           SMULI(r2, i0, r0);
-       else
-           UMULI(r2, i0, r0);
-       RDY(r1);
-    }
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       iqmulr(r0, r1, r2, rn(reg), sign);
-       jit_unget_reg(reg);
-    }
-}
-
-#  else
-static __int128_t __llmul(jit_word_t a, jit_word_t b)
-{
-    return (__int128_t)a * (__int128_t)b;
-}
-
-#  define QMUL_PROLOG()                                                \
-    do {                                                       \
-       (void)jit_get_reg(_O0|jit_class_gpr|jit_class_named);   \
-       (void)jit_get_reg(_O1|jit_class_gpr|jit_class_named);   \
-       if (r0 != _G2_REGNO && r1 != _G2_REGNO)                 \
-           stxi(BIAS(-8), _FP_REGNO, _G2_REGNO);               \
-       if (r0 != _G3_REGNO && r1 != _G3_REGNO)                 \
-           stxi(BIAS(-16), _FP_REGNO, _G3_REGNO);              \
-       if (r0 != _G4_REGNO && r1 != _G4_REGNO)                 \
-           stxi(BIAS(-24), _FP_REGNO, _G4_REGNO);              \
-    } while (0)
-
-#  define QMUL_EPILOG()                                                \
-    do {                                                       \
-       if (r0 != _G2_REGNO && r1 != _G2_REGNO)                 \
-           ldxi(_G2_REGNO, _FP_REGNO, BIAS(-8));               \
-       if (r0 != _G3_REGNO && r1 != _G3_REGNO)                 \
-           ldxi(_G3_REGNO, _FP_REGNO, BIAS(-16));              \
-       if (r0 != _G4_REGNO && r1 != _G4_REGNO)                 \
-           ldxi(_G4_REGNO, _FP_REGNO, BIAS(-24));              \
-       (void)jit_unget_reg(_O0);                               \
-       (void)jit_unget_reg(_O1);                               \
-    } while (0)
-
-static void
-_qmulr(jit_state_t *_jit, int32_t r0, int32_t r1,
-       int32_t r2, int32_t r3)
-{
-    QMUL_PROLOG();
-    movr(_O0_REGNO, r3);
-    movr(_O1_REGNO, r2);
-    calli((jit_word_t)__llmul);
-    movr(r0, _O1_REGNO);
-    movr(r1, _O0_REGNO);
-    QMUL_EPILOG();
-}
-
-static void
-_qmuli(jit_state_t *_jit, int32_t r0, int32_t r1,
-       int32_t r2, jit_word_t i0)
-{
-    QMUL_PROLOG();
-    movi(_O0_REGNO, i0);
-    movr(_O1_REGNO, r2);
-    calli((jit_word_t)__llmul);
-    movr(r0, _O1_REGNO);
-    movr(r1, _O0_REGNO);
-    QMUL_EPILOG();
-}
-
-static __uint128_t __ullmul(jit_uword_t a, jit_uword_t b)
-{
-    return (__uint128_t)a * (__uint128_t)b;
-}
-
-static void
-_qmulr_u(jit_state_t *_jit, int32_t r0, int32_t r1,
-        int32_t r2, int32_t r3)
-{
-    QMUL_PROLOG();
-    movr(_O0_REGNO, r3);
-    movr(_O1_REGNO, r2);
-    calli((jit_word_t)__ullmul);
-    movr(r0, _O1_REGNO);
-    movr(r1, _O0_REGNO);
-    QMUL_EPILOG();
-}
-
-static void
-_qmuli_u(jit_state_t *_jit, int32_t r0, int32_t r1,
-        int32_t r2, jit_word_t i0)
-{
-    QMUL_PROLOG();
-    movi(_O0_REGNO, i0);
-    movr(_O1_REGNO, r2);
-    calli((jit_word_t)__ullmul);
-    movr(r0, _O1_REGNO);
-    movr(r1, _O0_REGNO);
-    QMUL_EPILOG();
-}
-#  endif
-
-static void
-_divr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
-#  if __WORDSIZE == 32
-    int32_t            reg;
-    reg = jit_get_reg(jit_class_gpr);
-    rshi(rn(reg), r1, 31);
-    WRY(rn(reg), 0);
-    SDIV(r1, r2, r0);
-    jit_unget_reg(reg);
-#  else
-    SDIVX(r1, r2, r0);
-#  endif
-}
-
-static void
-_divi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-#  if __WORDSIZE == 32
-    reg = jit_get_reg(jit_class_gpr);
-#  endif
-    if (s13_p(i0)) {
-#  if __WORDSIZE == 32
-       rshi(rn(reg), r1, 31);
-       WRY(rn(reg), 0);
-       SDIVI(r1, i0, r0);
-#  else
-       SDIVXI(r1, i0, r0);
-#  endif
-    }
-    else {
-#  if __WORDSIZE == 64
-       reg = jit_get_reg(jit_class_gpr);
-#  endif
-       movi(rn(reg), i0);
-       divr(r0, r1, rn(reg));
-#  if __WORDSIZE == 64
-       jit_unget_reg(reg);
-#  endif
-    }
-#  if __WORDSIZE == 32
-    jit_unget_reg(reg);
-#  endif
-}
-
-static void
-_divr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
-#  if __WORDSIZE == 32
-    WRYI(0, 0);
-    UDIV(r1, r2, r0);
-#  else
-    UDIVX(r1, r2, r0);
-#  endif
-}
-
-static void
-_divi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0)) {
-#  if __WORDSIZE == 32
-       WRYI(0, 0);
-       UDIVI(r1, i0, r0);
-#  else
-       UDIVXI(r1, i0, r0);
-#  endif
-    }
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       divr_u(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_iqdivr(jit_state_t *_jit, int32_t r0, int32_t r1,
-       int32_t r2, int32_t r3, jit_bool_t sign)
-{
-    int32_t            sv0, rg0;
-    int32_t            sv1, rg1;
-
-    if (r0 == r2 || r0 == r3) {
-       sv0 = jit_get_reg(jit_class_gpr);
-       rg0 = rn(sv0);
-    }
-    else
-       rg0 = r0;
-    if (r1 == r2 || r1 == r3) {
-       sv1 = jit_get_reg(jit_class_gpr);
-       rg1 = rn(sv1);
-    }
-    else
-       rg1 = r1;
-
-    if (sign)
-       divr(rg0, r2, r3);
-    else
-       divr_u(rg0, r2, r3);
-    mulr(rg1, r3, rg0);
-    subr(rg1, r2, rg1);
-    if (rg0 != r0) {
-       movr(r0, rg0);
-       jit_unget_reg(sv0);
-    }
-    if (rg1 != r1) {
-       movr(r1, rg1);
-       jit_unget_reg(sv1);
-    }
-}
-
-static void
-_iqdivi(jit_state_t *_jit, int32_t r0, int32_t r1,
-       int32_t r2, jit_word_t i0, jit_bool_t sign)
-{
-    int32_t            reg;
-    reg = jit_get_reg(jit_class_gpr);
-    movi(rn(reg), i0);
-    iqdivr(r0, r1, r2, rn(reg), sign);
-    jit_unget_reg(reg);
-}
-
-static void
-_remr(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
-    int32_t            reg;
-    if (r0 == r1 || r0 == r2) {
-       reg = jit_get_reg(jit_class_gpr);
-       divr(rn(reg), r1, r2);
-       mulr(rn(reg), r2, rn(reg));
-       subr(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-    else {
-       divr(r0, r1, r2);
-       mulr(r0, r2, r0);
-       subr(r0, r1, r0);
-    }
-}
-
-static void
-_remi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    reg = jit_get_reg(jit_class_gpr);
-    movi(rn(reg), i0);
-    remr(r0, r1, rn(reg));
-    jit_unget_reg(reg);
-}
-
-static void
-_remr_u(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
-    int32_t            reg;
-    if (r0 == r1 || r0 == r2) {
-       reg = jit_get_reg(jit_class_gpr);
-       divr_u(rn(reg), r1, r2);
-       mulr(rn(reg), r2, rn(reg));
-       subr(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-    else {
-       divr_u(r0, r1, r2);
-       mulr(r0, r2, r0);
-       subr(r0, r1, r0);
-    }
-}
-
-static void
-_remi_u(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    reg = jit_get_reg(jit_class_gpr);
-    movi(rn(reg), i0);
-    remr_u(r0, r1, rn(reg));
-    jit_unget_reg(reg);
-}
-
-static void
-_andi(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       ANDI(r1, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       andr(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_ori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       ORI(r1, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       orr(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_xori(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       XORI(r1, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       xorr(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_extr_c(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    lshi(r0, r1, __WORDSIZE - 8);
-    rshi(r0, r0, __WORDSIZE - 8);
-}
-
-static void
-_extr_s(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    lshi(r0, r1, __WORDSIZE - 16);
-    rshi(r0, r0, __WORDSIZE - 16);
-}
-
-static void
-_extr_us(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    lshi(r0, r1, __WORDSIZE - 16);
-    rshi_u(r0, r0, __WORDSIZE - 16);
-}
-
-#if __WORDSIZE == 64
-static void
-_extr_i(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    lshi(r0, r1, __WORDSIZE - 32);
-    rshi(r0, r0, __WORDSIZE - 32);
-}
-
-static void
-_extr_ui(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    lshi(r0, r1, __WORDSIZE - 32);
-    rshi_u(r0, r0, __WORDSIZE - 32);
-}
-#endif
-
-static void
-_cr(jit_state_t *_jit, int32_t cc,
-    int32_t r0, int32_t r1, int32_t r2)
-{
-    CMP(r1, r2);
-#  if __WORDSIZE == 32
-    Ba(cc, 3);
-#  else
-    BPa(cc, 3);
-#  endif
-    movi(r0, 1);
-    movi(r0, 0);
-}
-
-static void
-_cw(jit_state_t *_jit, int32_t cc,
-    int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0)) {
-       CMPI(r1, i0);
-#  if __WORDSIZE == 32
-       Ba(cc, 3);
-#  else
-       BPa(cc, 3);
-#  endif
-       movi(r0, 1);
-       movi(r0, 0);
-    }
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       cr(cc, r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_ldi_c(jit_state_t *_jit, int32_t r0, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       LDSBI(0, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldr_c(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_ldi_uc(jit_state_t *_jit, int32_t r0, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       LDUBI(0, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldr_uc(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_ldi_s(jit_state_t *_jit, int32_t r0, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       LDSHI(0, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldr_s(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_ldi_us(jit_state_t *_jit, int32_t r0, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       LDUHI(0, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldr_us(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_ldi_i(jit_state_t *_jit, int32_t r0, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0)) {
-#  if __WORDSIZE == 32
-       LDI(0, i0, r0);
-#  else
-       LDSWI(0, i0, r0);
-#  endif
-    }
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldr_i(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-#  if __WORDSIZE == 64
-static void
-_ldi_ui(jit_state_t *_jit, int32_t r0, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       LDUWI(0, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldr_ui(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_ldi_l(jit_state_t *_jit, int32_t r0, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       LDXI(0, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldr_l(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-#  endif
-
-static void
-_ldxi_c(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       LDSBI(r1, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldxr_c(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_ldxi_uc(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       LDUBI(r1, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldxr_uc(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_ldxi_s(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       LDSHI(r1, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldxr_s(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_ldxi_us(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       LDUHI(r1, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldxr_us(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_ldxi_i(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0)) {
-#  if __WORDSIZE == 32
-       LDI(r1, i0, r0);
-#  else
-       LDSWI(r1, i0, r0);
-#  endif
-    }
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldxr_i(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-#  if __WORDSIZE == 64
-static void
-_ldxi_ui(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       LDUWI(r1, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldxr_ui(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_ldxi_l(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       LDXI(r1, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldxr_l(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-#  endif
-
-static void
-_sti_c(jit_state_t *_jit, jit_word_t i0, int32_t r0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       STBI(r0, 0, i0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       str_c(rn(reg), r0);
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_sti_s(jit_state_t *_jit, jit_word_t i0, int32_t r0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       STHI(r0, 0, i0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       str_s(rn(reg), r0);
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_sti_i(jit_state_t *_jit, jit_word_t i0, int32_t r0)
-{
-    int32_t            reg;
-    if (s13_p(i0)) {
-#  if __WORDSIZE == 32
-       STI(r0, 0, i0);
-#  else
-       STWI(r0, 0, i0);
-#  endif
-    }
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       str_i(rn(reg), r0);
-       jit_unget_reg(reg);
-    }
-}
-
-#  if __WORDSIZE == 64
-static void
-_sti_l(jit_state_t *_jit, jit_word_t i0, int32_t r0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       STXI(r0, 0, i0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       str_l(rn(reg), r0);
-       jit_unget_reg(reg);
-    }
-}
-#  endif
-
-static void
-_stxi_c(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       STBI(r1, r0, i0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       stxr_c(r0, rn(reg), r1);
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_stxi_s(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       STHI(r1, r0, i0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       stxr_s(r0, rn(reg), r1);
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_stxi_i(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
-{
-    int32_t            reg;
-    if (s13_p(i0)) {
-#  if __WORDSIZE == 32
-       STI(r1, r0, i0);
-#  else
-       STWI(r1, r0, i0);
-#  endif
-    }
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       stxr_i(r0, rn(reg), r1);
-       jit_unget_reg(reg);
-    }
-}
-
-#  if __WORDSIZE == 64
-static void
-_stxi_l(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       STXI(r1, r0, i0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       stxr_l(r0, rn(reg), r1);
-       jit_unget_reg(reg);
-    }
-}
-#  endif
-
-static jit_word_t
-_br(jit_state_t *_jit, int32_t cc,
-    jit_word_t i0, int32_t r0, int32_t r1)
-{
-    jit_word_t         w;
-    CMP(r0, r1);
-    w = _jit->pc.w;
-#  if __WORDSIZE == 32
-    B(cc, (i0 - w) >> 2);
-#  else
-    BP(cc, (i0 - w) >> 2);
-#  endif
-    NOP();
-    return (w);
-}
-
-static jit_word_t
-_bw(jit_state_t *_jit, int32_t cc,
-    jit_word_t i0, int32_t r0, jit_word_t i1)
-{
-    jit_word_t         w;
-    int32_t            reg;
-    if (s13_p(i1)) {
-       CMPI(r0, i1);
-       w = _jit->pc.w;
-#  if __WORDSIZE == 32
-       B(cc, (i0 - w) >> 2);
-#  else
-       B(cc, (i0 - w) >> 2);
-#  endif
-       NOP();
-    }
-    else {
-       reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
-       movi(rn(reg), i1);
-       w = br(cc, i0, r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-    return (w);
-}
-
-static jit_word_t
-_b_asr(jit_state_t *_jit, jit_bool_t jif, jit_bool_t add, jit_bool_t sgn,
-       jit_word_t i0, int32_t r0, int32_t r1)
-{
-    jit_word_t         w;
-    if (add)
-       ADDcc(r0, r1, r0);
-    else
-       SUBcc(r0, r1, r0);
-    w = _jit->pc.w;
-#  if __WORDSIZE == 32
-    B(sgn ?
-      (jif ? SPARC_BVS : SPARC_BVC) :
-      (jif ? SPARC_BCS : SPARC_BCC),
-      (i0 - w) >> 2);
-#  else
-    BP(sgn ?
-       (jif ? SPARC_BPVS : SPARC_BPVC) :
-       (jif ? SPARC_BPCS : SPARC_BPCC),
-       (i0 - w) >> 2);
-#  endif
-    NOP();
-    return (w);
-}
-
-static jit_word_t
-_b_asw(jit_state_t *_jit, jit_bool_t jif, jit_bool_t add, jit_bool_t sgn,
-       jit_word_t i0, int32_t r0, jit_word_t i1)
-{
-    jit_word_t         w;
-    int32_t            reg;
-    if (s13_p(i1)) {
-       if (add)
-           ADDIcc(r0, i1, r0);
-       else
-           SUBIcc(r0, i1, r0);
-       w = _jit->pc.w;
-#  if __WORDSIZE == 32
-       B(sgn ?
-         (jif ? SPARC_BVS : SPARC_BVC) :
-         (jif ? SPARC_BCS : SPARC_BCC),
-         (i0 - w) >> 2);
-#  else
-       BP(sgn ?
-          (jif ? SPARC_BPVS : SPARC_BPVC) :
-          (jif ? SPARC_BPCS : SPARC_BPCC),
-          (i0 - w) >> 2);
-#  endif
-       NOP();
-    }
-    else {
-       reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
-       movi(rn(reg), i1);
-       w = b_asr(jif, add, sgn, i0, r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-    return (w);
-}
-
-static jit_word_t
-_bm_r(jit_state_t *_jit, jit_bool_t set,
-      jit_word_t i0, int32_t r0, int32_t r1)
-{
-    jit_word_t         w;
-    BTST(r0, r1);
-    w = _jit->pc.w;
-#  if __WORDSIZE == 32
-    B(set ? SPARC_BNZ : SPARC_BZ, (i0 - w) >> 2);
-#  else
-    BP(set ? SPARC_BPNE : SPARC_BPE, (i0 - w) >> 2);
-#  endif
-    NOP();
-    return (w);
-}
-
-static jit_word_t
-_bm_w(jit_state_t *_jit, jit_bool_t set,
-      jit_word_t i0, int32_t r0, jit_word_t i1)
-{
-    jit_word_t         w;
-    int32_t            reg;
-    if (s13_p(i1)) {
-       BTSTI(r0, i1);
-       w = _jit->pc.w;
-#  if __WORDSIZE == 32
-       B(set ? SPARC_BNZ : SPARC_BZ, (i0 - w) >> 2);
-#  else
-       BP(set ? SPARC_BPNE : SPARC_BPE, (i0 - w) >> 2);
-#  endif
-       NOP();
-    }
-    else {
-       reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
-       movi(rn(reg), i1);
-       w = bm_r(set, i0, r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-    return (w);
-}
-
-static void
-_jmpr(jit_state_t *_jit, int32_t r0)
-{
-    JMPL(0, r0, 0);
-    NOP();
-}
-
-static void
-_jmpi(jit_state_t *_jit, jit_word_t i0)
-{
-    jit_word_t         w;
-    int32_t            reg;
-    w = (i0 - _jit->pc.w) >> 2;
-    if (s22_p(w)) {
-       BA(w);
-       NOP();
-    }
-    else {
-       reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
-       movi(rn(reg), i0);
-       jmpr(rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static jit_word_t
-_jmpi_p(jit_state_t *_jit, jit_word_t i0)
-{
-    jit_word_t         w;
-    int32_t            reg;
-    reg = jit_get_reg(jit_class_gpr|jit_class_nospill);
-    w = movi_p(rn(reg), i0);
-    jmpr(rn(reg));
-    jit_unget_reg(reg);
-    return (w);
-}
-
-static void
-_callr(jit_state_t *_jit, int32_t r0)
-{
-    CALL(r0);
-    NOP();
-}
-
-static void
-_calli(jit_state_t *_jit, jit_word_t i0)
-{
-    jit_word_t         w;
-    w = (i0 - _jit->pc.w) >> 2;
-    CALLI(w);
-    NOP();
-}
-
-static jit_word_t
-_calli_p(jit_state_t *_jit, jit_word_t i0)
-{
-    jit_word_t         w;
-    int32_t            reg;
-    reg = jit_get_reg(jit_class_gpr);
-    w = movi_p(rn(reg), i0);
-    callr(rn(reg));
-    jit_unget_reg(reg);
-    return (w);
-}
-
-#define OFF(n)         BIAS(((n) * sizeof(jit_word_t)))
-static void
-_prolog(jit_state_t *_jit, jit_node_t *node)
-{
-    int32_t            reg;
-    if (_jitc->function->define_frame || _jitc->function->assume_frame) {
-       int32_t frame = -_jitc->function->frame;
-       assert(_jitc->function->self.aoff >= frame);
-       if (_jitc->function->assume_frame)
-           return;
-       _jitc->function->self.aoff = frame;
-    }
-    if (_jitc->function->allocar)
-       _jitc->function->self.aoff &= -16;
-    /* align at 16 bytes boundary */
-    _jitc->function->stack = ((stack_framesize +
-                             _jitc->function->self.alen -
-                             _jitc->function->self.aoff) + 15) & -16;
-    SAVEI(_SP_REGNO, -_jitc->function->stack, _SP_REGNO);
-
-    /* (most) other backends do not save incoming arguments, so,
-     * only save locals here */
-    if (jit_regset_tstbit(&_jitc->function->regset, _L0))
-       stxi(OFF(0), _SP_REGNO, _L0_REGNO);
-    if (jit_regset_tstbit(&_jitc->function->regset, _L1))
-       stxi(OFF(1), _SP_REGNO, _L1_REGNO);
-    if (jit_regset_tstbit(&_jitc->function->regset, _L2))
-       stxi(OFF(2), _SP_REGNO, _L2_REGNO);
-    if (jit_regset_tstbit(&_jitc->function->regset, _L3))
-       stxi(OFF(3), _SP_REGNO, _L3_REGNO);
-    if (jit_regset_tstbit(&_jitc->function->regset, _L4))
-       stxi(OFF(4), _SP_REGNO, _L4_REGNO);
-    if (jit_regset_tstbit(&_jitc->function->regset, _L5))
-       stxi(OFF(5), _SP_REGNO, _L5_REGNO);
-    if (jit_regset_tstbit(&_jitc->function->regset, _L6))
-       stxi(OFF(6), _SP_REGNO, _L6_REGNO);
-    if (jit_regset_tstbit(&_jitc->function->regset, _L7))
-       stxi(OFF(7), _SP_REGNO, _L7_REGNO);
-
-    if (_jitc->function->allocar) {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), BIAS(_jitc->function->self.aoff));
-       /* Already "biased" by allocai */
-       stxi_i(_jitc->function->aoffoff, _FP_REGNO, rn(reg));
-       jit_unget_reg(reg);
-    }
-
-    if (_jitc->function->self.call & jit_call_varargs) {
-       for (reg = _jitc->function->vagp; jit_arg_reg_p(reg); ++reg)
-           stxi(BIAS((16 + (__WORDSIZE == 32)) * sizeof(jit_word_t) +
-                     reg * sizeof(jit_word_t)), _FP_REGNO, rn(_I0 + reg));
-    }
-}
-
-static void
-_epilog(jit_state_t *_jit, jit_node_t *node)
-{
-    if (_jitc->function->assume_frame)
-       return;
-    /* (most) other backends do not save incoming arguments, so,
-     * only save locals here */
-    if (jit_regset_tstbit(&_jitc->function->regset, _L0))
-       ldxi(_L0_REGNO, _FP_REGNO, _jitc->function->stack + OFF(0));
-    if (jit_regset_tstbit(&_jitc->function->regset, _L1))
-       ldxi(_L1_REGNO, _FP_REGNO, _jitc->function->stack + OFF(1));
-    if (jit_regset_tstbit(&_jitc->function->regset, _L2))
-       ldxi(_L2_REGNO, _FP_REGNO, _jitc->function->stack + OFF(2));
-    if (jit_regset_tstbit(&_jitc->function->regset, _L3))
-       ldxi(_L3_REGNO, _FP_REGNO, _jitc->function->stack + OFF(3));
-    if (jit_regset_tstbit(&_jitc->function->regset, _L4))
-       ldxi(_L4_REGNO, _FP_REGNO, _jitc->function->stack + OFF(4));
-    if (jit_regset_tstbit(&_jitc->function->regset, _L5))
-       ldxi(_L5_REGNO, _FP_REGNO, _jitc->function->stack + OFF(5));
-    if (jit_regset_tstbit(&_jitc->function->regset, _L6))
-       ldxi(_L6_REGNO, _FP_REGNO, _jitc->function->stack + OFF(6));
-    if (jit_regset_tstbit(&_jitc->function->regset, _L7))
-       ldxi(_L7_REGNO, _FP_REGNO, _jitc->function->stack + OFF(7));
-    RESTOREI(0, 0, 0);
-    RETL();
-    NOP();
-}
-
-static void
-_vastart(jit_state_t *_jit, int32_t r0)
-{
-    /* Initialize stack pointer to the first stack argument. */
-    if (jit_arg_reg_p(_jitc->function->vagp))
-       addi(r0, _FP_REGNO, BIAS((16 + (__WORDSIZE == 32) +
-                                 _jitc->function->vagp) *
-                                sizeof(jit_word_t)));
-    else
-       addi(r0, _FP_REGNO, BIAS(_jitc->function->self.size));
-}
-
-static void
-_vaarg(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    assert(_jitc->function->self.call & jit_call_varargs);
-
-    /* Load argument. */
-    ldr(r0, r1);
-
-    /* Update vararg stack pointer. */
-    addi(r1, r1, sizeof(jit_word_t));
-}
-
-static void
-_patch_at(jit_state_t *_jit, jit_word_t instr, jit_word_t label)
-{
-    jit_instr_t                 i;
-    union {
-       int32_t *i;
-       jit_word_t       w;
-    } u;
-
-    u.w = instr;
-    i.v = u.i[0];
-
-    if (i.op.b == 0) {                         /* conditional branch */
-       if (i.op2.b == 2 || i.op2.b == 6) {     /* int or float condition */
-           i.disp22.b = (label - instr) >> 2;
-           u.i[0] = i.v;
-       }
-#  if __WORDSIZE == 64
-       else if (i.op2.b == 1) {
-           i.disp19.b = (label - instr) >> 2;
-           u.i[0] = i.v;
-       }
-#  endif
-       else if (i.op2.b == 4) {        /* movi_p */
-           /* SETHI */
-           i.imm22.b = HI((int)label);
-           u.i[0] = i.v;
-           i.v = u.i[1];
-           if (i.op.b == 2 && i.op3.b == 2) {
-               /* ORI */
-               i.simm13.b = LO(label);
-               u.i[1] = i.v;
-#  if __WORDSIZE == 64
-               i.v = u.i[2];
-               assert(i.op2.b == 4);
-               label = (label >> 32) & 0xffffffff;
-               i.imm22.b = HI((int)label);
-               u.i[2] = i.v;
-               i.v = u.i[3];
-               assert(i.op.b == 2 && i.op3.b == 2);
-               /* ORI */
-               i.simm13.b = LO(label);
-               u.i[3] = i.v;
-#  endif
-           }
-           else
-               abort();
-       }
-       else
-           abort();
-    }
-    else
-       abort();
-}
-#endif
diff --git a/lightening/sparc-fpu.c b/lightening/sparc-fpu.c
deleted file mode 100644
index 3305b4d..0000000
--- a/lightening/sparc-fpu.c
+++ /dev/null
@@ -1,1499 +0,0 @@
-/*
- * Copyright (C) 2013-2017  Free Software Foundation, Inc.
- *
- * This file is part of GNU lightning.
- *
- * GNU lightning is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU lightning is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
- * License for more details.
- *
- * Authors:
- *     Paulo Cesar Pereira de Andrade
- */
-
-#if PROTO
-#  if __WORDSIZE == 32
-#    define FPR(r)                     (r)
-#    define CLASS_SNG                  jit_class_fpr
-#    define CLASS_DBL                  jit_class_fpr
-#  else
-#    define single_precision_p(r)      ((r) >= 0 && (r) <= 31)
-#    define FPR(r)                     ((r) > 31 ? (r) - 31 : (r))
-#    define CLASS_SNG                  (jit_class_fpr | jit_class_sng)
-#    define CLASS_DBL                  (jit_class_fpr | jit_class_dbl)
-#  endif
-#  define LDF(rs1, rs2, rd)            f3r(3, FPR(rd), 32, FPR(rs1), FPR(rs2))
-#  define LDFI(rs1, imm, rd)           f3i(3, FPR(rd), 32, FPR(rs1), imm)
-#  define LDDF(rs1, rs2, rd)           f3r(3, FPR(rd), 35, FPR(rs1), FPR(rs2))
-#  define LDDFI(rs1, imm, rd)          f3i(3, FPR(rd), 35, FPR(rs1), imm)
-#  define LDFSR(rs1, rs2, rd)          f3r(3, FPR(rd), 33, FPR(rs1), FPR(rs2))
-#  define LDFSRI(rs1, imm, rd)         f3i(3, FPR(rd), 33, FPR(rs1), imm)
-#  define STF(rd, rs1, rs2)            f3r(3, FPR(rd), 36, FPR(rs1), FPR(rs2))
-#  define STFI(rd, rs1, imm)           f3i(3, FPR(rd), 36, FPR(rs1), imm)
-#  define STDF(rd, rs1, rs2)           f3r(3, FPR(rd), 39, FPR(rs1), FPR(rs2))
-#  define STDFI(rd, rs1, imm)          f3i(3, FPR(rd), 39, FPR(rs1), imm)
-#  define STFSR(rd, rs1, rs2)          f3r(3, FPR(rd), 37, FPR(rs1), FPR(rs2))
-#  define STFSRI(rd, rs1, imm)         f3i(3, FPR(rd), 37, FPR(rs1), imm)
-#  define STDFQ(rd, rs1, rs2)          f3r(3, FPR(rd), 38, FPR(rs1), FPR(rs2))
-#  define STFDFQ(rd, rs1, imm)         f3i(3, FPR(rd), 38, FPR(rs1), imm)
-#  define SPARC_FBA                    8       /* always - 1 */
-#  define SPARC_FBN                    0       /* never - 0 */
-#  define SPARC_FBU                    7       /* unordered - U */
-#  define SPARC_FBG                    6       /* greater - G */
-#  define SPARC_FBUG                   5       /* unordered or greater - G or 
U */
-#  define SPARC_FBL                    4       /* less - L */
-#  define SPARC_FBUL                   3       /* unordered or less - L or U */
-#  define SPARC_FBLG                   2       /* less or greater - L or G */
-#  define SPARC_FBNE                   1       /* not equal - L or G or U */
-#  define SPARC_FBNZ                   SPARC_FBNE
-#  define SPARC_FBE                    9       /* equal - E */
-#  define SPARC_FBZ                    SPARC_FBE
-#  define SPARC_FBUE                   10      /* unordered or equal - E or U 
*/
-#  define SPARC_FBGE                   11      /* greater or equal - E or G */
-#  define SPARC_FBUGE                  12      /* unordered or greater or 
equal - E or G or U */
-#  define SPARC_FBLE                   13      /* less or equal - E or L */
-#  define SPARC_FBULE                  14      /* unordered or less or equal - 
E or L or U */
-#  define SPARC_FBO                    15      /* ordered - E or L or G */
-#  define FB(cc, imm)                  f2b(0, 0, cc, 6, imm)
-#  define FBa(cc, imm)                 f2b(0, 1, cc, 6, imm)
-#  define FBA(imm)                     FB(SPARC_FBA, imm)
-#  define FBAa(imm)                    FBa(SPARC_FBA, imm)
-#  define FBN(imm)                     FB(SPARC_FBN, imm)
-#  define FBNa(imm)                    FBa(SPARC_FBN, imm)
-#  define FBU(imm)                     FB(SPARC_FBU, imm)
-#  define FBUa(imm)                    FBa(SPARC_FBU, imm)
-#  define FBG(imm)                     FB(SPARC_FBG, imm)
-#  define FBGa(imm)                    FBa(SPARC_FBG, imm)
-#  define FBUG(imm)                    FB(SPARC_FBUG, imm)
-#  define FBUGa(imm)                   FBa(SPARC_FBUG, imm)
-#  define FBL(imm)                     FB(SPARC_FBL, imm)
-#  define FBLa(imm)                    FBa(SPARC_FBL, imm)
-#  define FBUL(imm)                    FB(SPARC_FBUL, imm)
-#  define FBULa(imm)                   FBa(SPARC_FBUL, imm)
-#  define FBLG(imm)                    FB(SPARC_FBLG, imm)
-#  define FBLGa(imm)                   FBa(SPARC_FBLG, imm)
-#  define FBNE(imm)                    FB(SPARC_FBNE, imm)
-#  define FBNEa(imm)                   FBa(SPARC_FBNE, imm)
-#  define FBE(imm)                     FB(SPARC_FBE, imm)
-#  define FBEa(imm)                    FBa(SPARC_FBE, imm)
-#  define FBUE(imm)                    FB(SPARC_FBUE, imm)
-#  define FBUEa(imm)                   FBa(SPARC_FBUE, imm)
-#  define FBLE(imm)                    FB(SPARC_FBLE, imm)
-#  define FBLEa(imm)                   FBa(SPARC_FBLE, imm)
-#  define FBO(imm)                     FB(SPARC_FBO, imm)
-#  define FBOa(imm)                    FBa(SPARC_FBO, imm)
-#  define FPop1(rd, rs1, opf, rs2)     f3f(rd, 52, rs1, opf, rs2)
-#  define FPop2(rd, rs1, opf, rs2)     f3f(rd, 53, rs1, opf, rs2)
-#  define f3f(rd, op3, rs1, opf, rs2)  _f3f(_jit, rd, op3, rs1, opf, rs2)
-static void
-_f3f(jit_state_t*,int32_t,int32_t,int32_t, int32_t,int32_t);
-#  define FITOS(rs2, rd)               FPop1(rd, 0, 196, rs2)
-#  define FITOD(rs2, rd)               FPop1(rd, 0, 200, rs2)
-#  define FITOQ(rs2, rd)               FPop1(rd, 0, 204, rs2)
-#  if __WORDSIZE == 64
-#    define FXTOS(rs2, rd)             FPop1(rd, 0, 132, rs2)
-#    define FXTOD(rs2, rd)             FPop1(rd, 0, 136, rs2)
-#    define FxTOQ(rs2, rd)             FPop1(rd, 0, 140, rs2)
-#  endif
-#  define FSTOI(rs2, rd)               FPop1(rd, 0, 209, rs2)
-#  define FDTOI(rs2, rd)               FPop1(rd, 0, 210, rs2)
-#  define FQTOI(rs2, rd)               FPop1(rd, 0, 211, rs2)
-#  define FSTOX(rs2, rd)               FPop1(rd, 0, 129, rs2)
-#  define FDTOX(rs2, rd)               FPop1(rd, 0, 130, rs2)
-#  define FQTOX(rs2, rd)               FPop1(rd, 0, 131, rs2)
-#  define FSTOD(rs2, rd)               FPop1(rd, 0, 201, rs2)
-#  define FSTOQ(rs2, rd)               FPop1(rd, 0, 205, rs2)
-#  define FDTOS(rs2, rd)               FPop1(rd, 0, 198, rs2)
-#  define FDTOQ(rs2, rd)               FPop1(rd, 0, 206, rs2)
-#  define FQTOS(rs2, rd)               FPop1(rd, 0, 199, rs2)
-#  define FQTOD(rs2, rd)               FPop1(rd, 0, 203, rs2)
-#  define FMOVS(rs2, rd)               FPop1(rd, 0,   1, rs2)
-#  define FMOVD(rs2, rd)               FPop1(rd, 0,   2, rs2)
-#  define FMOVQ(rs2, rd)               FPop1(rd, 0,   3, rs2)
-#  define FNEGS(rs2, rd)               FPop1(rd, 0,   5, rs2)
-#  define FNEGD(rs2, rd)               FPop1(rd, 0,   6, rs2)
-#  define FNEGQ(rs2, rd)               FPop1(rd, 0,   7, rs2)
-#  define FABSS(rs2, rd)               FPop1(rd, 0,   9, rs2)
-#  define FABSD(rs2, rd)               FPop1(rd, 0,  10, rs2)
-#  define FABSQ(rs2, rd)               FPop1(rd, 0,  11, rs2)
-#  define FSQRTS(rs2, rd)              FPop1(rd, 0,  41, rs2)
-#  define FSQRTD(rs2, rd)              FPop1(rd, 0,  42, rs2)
-#  define FSQRTQ(rs2, rd)              FPop1(rd, 0,  43, rs2)
-#  define SPARC_FADDS                  65
-#  define SPARC_FADDD                  66
-#  define SPARC_FADDQ                  67
-#  define SPARC_FSUBS                  69
-#  define SPARC_FSUBD                  70
-#  define SPARC_FSUBQ                  71
-#  define SPARC_FMULS                  73
-#  define SPARC_FMULD                  74
-#  define SPARC_FMULQ                  75
-#  define SPARC_FSMULD                 105
-#  define SPARC_FDMULQ                 110
-#  define SPARC_FDIVS                  77
-#  define SPARC_FDIVD                  78
-#  define SPARC_FDIVQ                  79
-#  define FADDS(rs1, rs2, rd)          FPop1(rd, rs1,  SPARC_FADDS, rs2)
-#  define FADDD(rs1, rs2, rd)          FPop1(rd, rs1,  SPARC_FADDD, rs2)
-#  define FADDQ(rs1, rs2, rd)          FPop1(rd, rs1,  SPARC_FADDQ, rs2)
-#  define FSUBS(rs1, rs2, rd)          FPop1(rd, rs1,  SPARC_FSUBS, rs2)
-#  define FSUBD(rs1, rs2, rd)          FPop1(rd, rs1,  SPARC_FSUBD, rs2)
-#  define FSUBQ(rs1, rs2, rd)          FPop1(rd, rs1,  SPARC_FSUBQ, rs2)
-#  define FMULS(rs1, rs2, rd)          FPop1(rd, rs1,  SPARC_FMULS, rs2)
-#  define FMULD(rs1, rs2, rd)          FPop1(rd, rs1,  SPARC_FMULD, rs2)
-#  define FMULQ(rs1, rs2, rd)          FPop1(rd, rs1,  SPARC_FMULQ, rs2)
-#  define FSMULD(rs1, rs2, rd)         FPop1(rd, rs1,  SPARC_FSMULD, rs2)
-#  define FDMULQ(rs1, rs2, rd)         FPop1(rd, rs1,  SPARC_FDMULQ, rs2)
-#  define FDIVS(rs1, rs2, rd)          FPop1(rd, rs1,  SPARC_FDIVS, rs2)
-#  define FDIVD(rs1, rs2, rd)          FPop1(rd, rs1,  SPARC_FDIVD, rs2)
-#  define FDIVQ(rs1, rs2, rd)          FPop1(rd, rs1,  SPARC_FDIVQ, rs2)
-#  define SPARC_FCMPS                  81
-#  define SPARC_FCMPD                  82
-#  define SPARC_FCMPQ                  83
-#  define SPARC_FCMPES                 85
-#  define SPARC_FCMPED                 86
-#  define SPARC_FCMPEQ                 87
-#  define FCMPS(rs1, rs2)              FPop2(0, rs1, SPARC_FCMPS, rs2)
-#  define FCMPD(rs1, rs2)              FPop2(0, rs1, SPARC_FCMPD, rs2)
-#  define FCMPQ(rs1, rs2)              FPop2(0, rs1, SPARC_FCMPQ, rs2)
-#  define FCMPES(rs1, rs2)             FPop2(0, rs1, SPARC_FCMPES, rs2)
-#  define FCMPED(rs1, rs2)             FPop2(0, rs1, SPARC_FCMPED, rs2)
-#  define FCMPEQ(rs1, rs2)             FPop2(0, rs1, SPARC_FCMPEQ, rs2)
-#  define CPop1(rd, rs1, opc, rs2)     f3f(rd, 54, rs1, opf, rs2)
-#  define CPop2(rd, rs1, opc, rs2)     f3f(rd, 55, rs1, opf, rs2)
-#  define extr_f(r0, r1)               _extr_f(_jit, r0, r1)
-static void _extr_f(jit_state_t*, int32_t, int32_t);
-#  if __WORDSIZSE == 32
-#    define truncr_f(r0, r1)           truncr_f_i(r0, r1)
-#  define truncr_d(r0, r1)             truncr_d_i(r0, r1)
-#  else
-#    define truncr_f(r0, r1)           truncr_f_l(r0, r1)
-#  define truncr_d(r0, r1)             truncr_d_l(r0, r1)
-#  endif
-#  define truncr_f_i(r0, r1)           _truncr_f_i(_jit, r0, r1)
-static void _truncr_f_i(jit_state_t*, int32_t, int32_t);
-#  if __WORDSIZE == 64
-#    define truncr_f_l(r0, r1)         _truncr_f_l(_jit, r0, r1)
-static void _truncr_f_l(jit_state_t*, int32_t, int32_t);
-#  endif
-#  if __WORDSIZE == 32
-#    define extr_d_f(r0, r1)           FDTOS(r1, r0)
-#  else
-#    define extr_d_f(r0, r1)           _extr_d_f(_jit, r0, r1)
-static void _extr_d_f(jit_state_t*, int32_t, int32_t);
-#  endif
-#  define movi_f(r0, i0)               _movi_f(_jit, r0, i0)
-#  if __WORDSIZE == 32
-#    define movr_f(r0, r1)             FMOVS(r1, r0)
-#  else
-#    define movr_f(r0, r1)             _movr_f(_jit, r0, r1)
-static void _movr_f(jit_state_t*, int32_t, int32_t);
-#  endif
-static void _movi_f(jit_state_t*, int32_t, jit_float32_t*);
-#  if __WORDSIZE == 32
-#    define negr_f(r0, r1)             FNEGS(r1, r0)
-#    define absr_f(r0, r1)             FABSS(r1, r0)
-#    define sqrtr_f(r0, r1)            FSQRTS(r1, r0)
-#  else
-#    define negr_f(r0, r1)             _negr_f(_jit, r0, r1)
-static void _negr_f(jit_state_t*, int32_t, int32_t);
-#    define absr_f(r0, r1)             _absr_f(_jit, r0, r1)
-static void _absr_f(jit_state_t*, int32_t, int32_t);
-#    define sqrtr_f(r0, r1)            _sqrtr_f(_jit, r0, r1)
-static void _sqrtr_f(jit_state_t*, int32_t, int32_t);
-#  endif
-#  define extr_d(r0, r1)               _extr_d(_jit, r0, r1)
-static void _extr_d(jit_state_t*, int32_t, int32_t);
-#  define truncr_d_i(r0, r1)           _truncr_d_i(_jit, r0, r1)
-static void _truncr_d_i(jit_state_t*, int32_t, int32_t);
-#  if __WORDSIZE == 64
-#    define truncr_d_l(r0, r1)         _truncr_d_l(_jit, r0, r1)
-static void _truncr_d_l(jit_state_t*, int32_t, int32_t);
-#  endif
-#  if __WORDSIZE == 32
-#    define extr_f_d(r0, r1)           FSTOD(r1, r0)
-#  else
-#    define extr_f_d(r0, r1)           _extr_f_d(_jit, r0, r1)
-static void _extr_f_d(jit_state_t*, int32_t, int32_t);
-#  endif
-#  define movi_d(r0, i0)               _movi_d(_jit, r0, i0)
-static void _movi_d(jit_state_t*, int32_t, jit_float64_t*);
-#  if __WORDSIZE == 32
-#  define movr_d(r0, r1)               _movr_d(_jit, r0, r1)
-static void _movr_d(jit_state_t*, int32_t, int32_t);
-#  define negr_d(r0, r1)               _negr_d(_jit, r0, r1)
-static void _negr_d(jit_state_t*, int32_t, int32_t);
-#  define absr_d(r0, r1)               _absr_d(_jit, r0, r1)
-static void _absr_d(jit_state_t*, int32_t, int32_t);
-#  else
-#    define movr_d(r0, r1)             FMOVD(r1, r0)
-#    define negr_d(r0, r1)             FNEGD(r1, r0)
-#    define absr_d(r0, r1)             FABSD(r1, r0)
-#  endif
-#  define sqrtr_d(r0, r1)              FSQRTD(r1, r0)
-#  define fop1f(op, r0, r1, i0)                _fop1f(_jit, op, r0, r1, i0)
-static void _fop1f(jit_state_t*,int32_t,
-                  int32_t,int32_t,jit_float32_t*);
-#  define rfop1f(op, r0, r1, i0)       _rfop1f(_jit, op, r0, r1, i0)
-static void _rfop1f(jit_state_t*,int32_t,
-                   int32_t,int32_t,jit_float32_t*);
-#  define fop1d(op, r0, r1, i0)                _fop1d(_jit, op, r0, r1, i0)
-static void _fop1d(jit_state_t*,int32_t,
-                  int32_t,int32_t,jit_float64_t*);
-#  define rfop1d(op, r0, r1, i0)       _rfop1d(_jit, op, r0, r1, i0)
-static void _rfop1d(jit_state_t*,int32_t,
-                   int32_t,int32_t,jit_float64_t*);
-#  if __WORDSIZE == 32
-#    define addr_f(r0, r1, r2)         FADDS(r1, r2, r0)
-#    define subr_f(r0, r1, r2)         FSUBS(r1, r2, r0)
-#    define mulr_f(r0, r1, r2)         FMULS(r1, r2, r0)
-#    define divr_f(r0, r1, r2)         FDIVS(r1, r2, r0)
-#  else
-#    define fop2f(op, r0, r1, r2)      _fop2f(_jit, op, r0, r1, r2)
-static void _fop2f(jit_state_t*, int32_t,
-                  int32_t, int32_t, int32_t);
-#    define addr_f(r0, r1, r2)         fop2f(SPARC_FADDS, r0, r1, r2)
-#    define subr_f(r0, r1, r2)         fop2f(SPARC_FSUBS, r0, r1, r2)
-#    define mulr_f(r0, r1, r2)         fop2f(SPARC_FMULS, r0, r1, r2)
-#    define divr_f(r0, r1, r2)         fop2f(SPARC_FDIVS, r0, r1, r2)
-#  endif
-#  define addi_f(r0, r1, i0)           fop1f(SPARC_FADDS, r0, r1, i0)
-#  define subi_f(r0, r1, i0)           fop1f(SPARC_FSUBS, r0, r1, i0)
-#  define rsbr_f(r0, r1, r2)           subr_f(r0, r2, r1)
-#  define rsbi_f(r0, r1, i0)           rfop1f(SPARC_FSUBS, r0, r1, i0)
-#  define rsbr_d(r0, r1, r2)           subr_d(r0, r2, r1)
-#  define rsbi_d(r0, r1, i0)           rfop1d(SPARC_FSUBD, r0, r1, i0)
-#  define muli_f(r0, r1, i0)           fop1f(SPARC_FMULS, r0, r1, i0)
-#  define divi_f(r0, r1, i0)           fop1f(SPARC_FDIVS, r0, r1, i0)
-#  define addr_d(r0, r1, r2)           FADDD(r1, r2, r0)
-#  define addi_d(r0, r1, i0)           fop1d(SPARC_FADDD, r0, r1, i0)
-#  define subr_d(r0, r1, r2)           FSUBD(r1, r2, r0)
-#  define subi_d(r0, r1, i0)           fop1d(SPARC_FSUBD, r0, r1, i0)
-#  define rsbr_d(r0, r1, r2)           subr_d(r0, r2, r1)
-#  define rsbi_d(r0, r1, i0)           rfop1d(SPARC_FSUBD, r0, r1, i0)
-#  define mulr_d(r0, r1, r2)           FMULD(r1, r2, r0)
-#  define muli_d(r0, r1, i0)           fop1d(SPARC_FMULD, r0, r1, i0)
-#  define divr_d(r0, r1, r2)           FDIVD(r1, r2, r0)
-#  define divi_d(r0, r1, i0)           fop1d(SPARC_FDIVD, r0, r1, i0)
-#define fcr(cc, r0, r1, r2)            _fcr(_jit, cc, r0, r1, r2)
-static void _fcr(jit_state_t*,int32_t,int32_t,int32_t,int32_t);
-#define fcw(cc, r0, r1, i0)            _fcw(_jit, cc, r0, r1, i0)
-static void
-_fcw(jit_state_t*,int32_t,int32_t,int32_t,jit_float32_t*);
-#  define ltr_f(r0, r1, r2)            fcr(SPARC_FBL, r0, r1, r2)
-#  define lti_f(r0, r1, i0)            fcw(SPARC_FBL, r0, r1, i0)
-#  define ler_f(r0, r1, r2)            fcr(SPARC_FBLE, r0, r1, r2)
-#  define lei_f(r0, r1, i0)            fcw(SPARC_FBLE, r0, r1, i0)
-#  define eqr_f(r0, r1, r2)            fcr(SPARC_FBE, r0, r1, r2)
-#  define eqi_f(r0, r1, i0)            fcw(SPARC_FBE, r0, r1, i0)
-#  define ger_f(r0, r1, r2)            fcr(SPARC_FBGE, r0, r1, r2)
-#  define gei_f(r0, r1, i0)            fcw(SPARC_FBGE, r0, r1, i0)
-#  define gtr_f(r0, r1, r2)            fcr(SPARC_FBG, r0, r1, r2)
-#  define gti_f(r0, r1, i0)            fcw(SPARC_FBG, r0, r1, i0)
-#  define ner_f(r0, r1, r2)            fcr(SPARC_FBNE, r0, r1, r2)
-#  define nei_f(r0, r1, i0)            fcw(SPARC_FBNE, r0, r1, i0)
-#  define unltr_f(r0, r1, r2)          fcr(SPARC_FBUL, r0, r1, r2)
-#  define unlti_f(r0, r1, i0)          fcw(SPARC_FBUL, r0, r1, i0)
-#  define unler_f(r0, r1, r2)          fcr(SPARC_FBULE, r0, r1, r2)
-#  define unlei_f(r0, r1, i0)          fcw(SPARC_FBULE, r0, r1, i0)
-#  define uneqr_f(r0, r1, r2)          fcr(SPARC_FBUE, r0, r1, r2)
-#  define uneqi_f(r0, r1, i0)          fcw(SPARC_FBUE, r0, r1, i0)
-#  define unger_f(r0, r1, r2)          fcr(SPARC_FBUGE, r0, r1, r2)
-#  define ungei_f(r0, r1, i0)          fcw(SPARC_FBUGE, r0, r1, i0)
-#  define ungtr_f(r0, r1, r2)          fcr(SPARC_FBUG, r0, r1, r2)
-#  define ungti_f(r0, r1, i0)          fcw(SPARC_FBUG, r0, r1, i0)
-#  define ltgtr_f(r0, r1, r2)          fcr(SPARC_FBLG, r0, r1, r2)
-#  define ltgti_f(r0, r1, i0)          fcw(SPARC_FBLG, r0, r1, i0)
-#  define ordr_f(r0, r1, r2)           fcr(SPARC_FBO, r0, r1, r2)
-#  define ordi_f(r0, r1, i0)           fcw(SPARC_FBO, r0, r1, i0)
-#  define unordr_f(r0, r1, r2)         fcr(SPARC_FBU, r0, r1, r2)
-#  define unordi_f(r0, r1, i0)         fcw(SPARC_FBU, r0, r1, i0)
-#define dcr(cc, r0, r1, r2)            _dcr(_jit, cc, r0, r1, r2)
-static void _dcr(jit_state_t*,int32_t,int32_t,int32_t,int32_t);
-#define dcw(cc, r0, r1, i0)            _dcw(_jit, cc, r0, r1, i0)
-static void
-_dcw(jit_state_t*,int32_t,int32_t,int32_t,jit_float64_t*);
-#  define ltr_d(r0, r1, r2)            dcr(SPARC_FBL, r0, r1, r2)
-#  define lti_d(r0, r1, i0)            dcw(SPARC_FBL, r0, r1, i0)
-#  define ler_d(r0, r1, r2)            dcr(SPARC_FBLE, r0, r1, r2)
-#  define lei_d(r0, r1, i0)            dcw(SPARC_FBLE, r0, r1, i0)
-#  define eqr_d(r0, r1, r2)            dcr(SPARC_FBE, r0, r1, r2)
-#  define eqi_d(r0, r1, i0)            dcw(SPARC_FBE, r0, r1, i0)
-#  define ger_d(r0, r1, r2)            dcr(SPARC_FBGE, r0, r1, r2)
-#  define gei_d(r0, r1, i0)            dcw(SPARC_FBGE, r0, r1, i0)
-#  define gtr_d(r0, r1, r2)            dcr(SPARC_FBG, r0, r1, r2)
-#  define gti_d(r0, r1, i0)            dcw(SPARC_FBG, r0, r1, i0)
-#  define ner_d(r0, r1, r2)            dcr(SPARC_FBNE, r0, r1, r2)
-#  define nei_d(r0, r1, i0)            dcw(SPARC_FBNE, r0, r1, i0)
-#  define unltr_d(r0, r1, r2)          dcr(SPARC_FBUL, r0, r1, r2)
-#  define unlti_d(r0, r1, i0)          dcw(SPARC_FBUL, r0, r1, i0)
-#  define unler_d(r0, r1, r2)          dcr(SPARC_FBULE, r0, r1, r2)
-#  define unlei_d(r0, r1, i0)          dcw(SPARC_FBULE, r0, r1, i0)
-#  define uneqr_d(r0, r1, r2)          dcr(SPARC_FBUE, r0, r1, r2)
-#  define uneqi_d(r0, r1, i0)          dcw(SPARC_FBUE, r0, r1, i0)
-#  define unger_d(r0, r1, r2)          dcr(SPARC_FBUGE, r0, r1, r2)
-#  define ungei_d(r0, r1, i0)          dcw(SPARC_FBUGE, r0, r1, i0)
-#  define ungtr_d(r0, r1, r2)          dcr(SPARC_FBUG, r0, r1, r2)
-#  define ungti_d(r0, r1, i0)          dcw(SPARC_FBUG, r0, r1, i0)
-#  define ltgtr_d(r0, r1, r2)          dcr(SPARC_FBLG, r0, r1, r2)
-#  define ltgti_d(r0, r1, i0)          dcw(SPARC_FBLG, r0, r1, i0)
-#  define ordr_d(r0, r1, r2)           dcr(SPARC_FBO, r0, r1, r2)
-#  define ordi_d(r0, r1, i0)           dcw(SPARC_FBO, r0, r1, i0)
-#  define unordr_d(r0, r1, r2)         dcr(SPARC_FBU, r0, r1, r2)
-#  define unordi_d(r0, r1, i0)         dcw(SPARC_FBU, r0, r1, i0)
-#  if __WORDSIZE == 32
-#    define ldr_f(r0, r1)              LDF(r1, 0, r0)
-#  else
-#  define ldr_f(r0, r1)                        _ldr_f(_jit, r0, r1)
-static void _ldr_f(jit_state_t*,int32_t,int32_t);
-#  endif
-#  define ldi_f(r0, i0)                        _ldi_f(_jit, r0, i0)
-static void _ldi_f(jit_state_t*,int32_t,jit_word_t);
-#  if __WORDSIZE == 32
-#    define ldxr_f(r0, r1, r2)         LDF(r1, r2, r0)
-#  else
-#  define ldxr_f(r0, r1, r2)           _ldxr_f(_jit, r0, r1, r2)
-static void _ldxr_f(jit_state_t*,int32_t,int32_t,int32_t);
-#  endif
-#  define ldxi_f(r0, r1, i0)           _ldxi_f(_jit, r0, r1, i0)
-static void _ldxi_f(jit_state_t*,int32_t,int32_t,jit_word_t);
-#  if __WORDSIZE == 32
-#    define str_f(r0, r1)              STF(r1, r0, 0)
-#  else
-#  define str_f(r0, r1)                        _str_f(_jit, r0, r1)
-static void _str_f(jit_state_t*,int32_t,int32_t);
-#  endif
-#  define sti_f(r0, i0)                        _sti_f(_jit, r0, i0)
-static void _sti_f(jit_state_t*,jit_word_t,int32_t);
-#  if __WORDSIZE == 32
-#    define stxr_f(r0, r1, r2)         STF(r2, r1, r0)
-#  else
-#  define stxr_f(r0, r1, r2)           _stxr_f(_jit, r0, r1, r2)
-static void _stxr_f(jit_state_t*,int32_t,int32_t,int32_t);
-#  endif
-#  define stxi_f(r0, r1, i0)           _stxi_f(_jit, r0, r1, i0)
-static void _stxi_f(jit_state_t*,jit_word_t,int32_t,int32_t);
-#  define ldr_d(r0, r1)                        LDDF(r1, 0, r0)
-#  define ldi_d(r0, i0)                        _ldi_d(_jit, r0, i0)
-static void _ldi_d(jit_state_t*,int32_t,jit_word_t);
-#  define ldxr_d(r0, r1, r2)           LDDF(r1, r2, r0)
-#  define ldxi_d(r0, r1, i0)           _ldxi_d(_jit, r0, r1, i0)
-static void _ldxi_d(jit_state_t*,int32_t,int32_t,int32_t);
-#  define str_d(r0, r1)                        STDF(r1, r0, 0)
-#  define sti_d(r0, i0)                        _sti_d(_jit, r0, i0)
-static void _sti_d(jit_state_t*,jit_word_t,int32_t);
-#  define stxr_d(r0, r1, r2)           STDF(r2, r1, r0)
-#  define stxi_d(r0, r1, i0)           _stxi_d(_jit, r0, r1, i0)
-static void _stxi_d(jit_state_t*,int32_t,int32_t,int32_t);
-#  define fbr(cc, i0, r0, r1)          _fbr(_jit, cc, i0, r0, r1)
-static jit_word_t
-_fbr(jit_state_t*,int32_t,jit_word_t,int32_t,int32_t);
-#  define fbw(cc, i0, r0, i1)          _fbw(_jit, cc, i0, r0, i1)
-static jit_word_t
-_fbw(jit_state_t*,int32_t,jit_word_t,int32_t,jit_float32_t*);
-#  define bltr_f(i0, r0, r1)           fbr(SPARC_FBL, i0, r0, r1)
-#  define blti_f(i0, r0, i1)           fbw(SPARC_FBL, i0, r0, i1)
-#  define bler_f(i0, r0, r1)           fbr(SPARC_FBLE, i0, r0, r1)
-#  define blei_f(i0, r0, i1)           fbw(SPARC_FBLE, i0, r0, i1)
-#  define beqr_f(i0, r0, r1)           fbr(SPARC_FBE, i0, r0, r1)
-#  define beqi_f(i0, r0, i1)           fbw(SPARC_FBE, i0, r0, i1)
-#  define bger_f(i0, r0, r1)           fbr(SPARC_FBGE, i0, r0, r1)
-#  define bgei_f(i0, r0, i1)           fbw(SPARC_FBGE, i0, r0, i1)
-#  define bgtr_f(i0, r0, r1)           fbr(SPARC_FBG, i0, r0, r1)
-#  define bgti_f(i0, r0, i1)           fbw(SPARC_FBG, i0, r0, i1)
-#  define bner_f(i0, r0, r1)           fbr(SPARC_FBNE, i0, r0, r1)
-#  define bnei_f(i0, r0, i1)           fbw(SPARC_FBNE, i0, r0, i1)
-#  define bunltr_f(i0, r0, r1)         fbr(SPARC_FBUL, i0, r0, r1)
-#  define bunlti_f(i0, r0, i1)         fbw(SPARC_FBUL, i0, r0, i1)
-#  define bunler_f(i0, r0, r1)         fbr(SPARC_FBULE, i0, r0, r1)
-#  define bunlei_f(i0, r0, i1)         fbw(SPARC_FBULE, i0, r0, i1)
-#  define buneqr_f(i0, r0, r1)         fbr(SPARC_FBUE, i0, r0, r1)
-#  define buneqi_f(i0, r0, i1)         fbw(SPARC_FBUE, i0, r0, i1)
-#  define bunger_f(i0, r0, r1)         fbr(SPARC_FBUGE, i0, r0, r1)
-#  define bungei_f(i0, r0, i1)         fbw(SPARC_FBUGE, i0, r0, i1)
-#  define bungtr_f(i0, r0, r1)         fbr(SPARC_FBUG, i0, r0, r1)
-#  define bungti_f(i0, r0, i1)         fbw(SPARC_FBUG, i0, r0, i1)
-#  define bltgtr_f(i0, r0, r1)         fbr(SPARC_FBLG, i0, r0, r1)
-#  define bltgti_f(i0, r0, i1)         fbw(SPARC_FBLG, i0, r0, i1)
-#  define bordr_f(i0, r0, r1)          fbr(SPARC_FBO, i0, r0, r1)
-#  define bordi_f(i0, r0, i1)          fbw(SPARC_FBO, i0, r0, i1)
-#  define bunordr_f(i0, r0, r1)                fbr(SPARC_FBU, i0, r0, r1)
-#  define bunordi_f(i0, r0, i1)                fbw(SPARC_FBU, i0, r0, i1)
-#  define dbr(cc, i0, r0, r1)          _dbr(_jit, cc, i0, r0, r1)
-static jit_word_t
-_dbr(jit_state_t*,int32_t,jit_word_t,int32_t,int32_t);
-#  define dbw(cc, i0, r0, i1)          _dbw(_jit, cc, i0, r0, i1)
-static jit_word_t
-_dbw(jit_state_t*,int32_t,jit_word_t,int32_t,jit_float64_t*);
-#  define bltr_d(i0, r0, r1)           dbr(SPARC_FBL, i0, r0, r1)
-#  define blti_d(i0, r0, i1)           dbw(SPARC_FBL, i0, r0, i1)
-#  define bler_d(i0, r0, r1)           dbr(SPARC_FBLE, i0, r0, r1)
-#  define blei_d(i0, r0, i1)           dbw(SPARC_FBLE, i0, r0, i1)
-#  define beqr_d(i0, r0, r1)           dbr(SPARC_FBE, i0, r0, r1)
-#  define beqi_d(i0, r0, i1)           dbw(SPARC_FBE, i0, r0, i1)
-#  define bger_d(i0, r0, r1)           dbr(SPARC_FBGE, i0, r0, r1)
-#  define bgei_d(i0, r0, i1)           dbw(SPARC_FBGE, i0, r0, i1)
-#  define bgtr_d(i0, r0, r1)           dbr(SPARC_FBG, i0, r0, r1)
-#  define bgti_d(i0, r0, i1)           dbw(SPARC_FBG, i0, r0, i1)
-#  define bner_d(i0, r0, r1)           dbr(SPARC_FBNE, i0, r0, r1)
-#  define bnei_d(i0, r0, i1)           dbw(SPARC_FBNE, i0, r0, i1)
-#  define bunltr_d(i0, r0, r1)         dbr(SPARC_FBUL, i0, r0, r1)
-#  define bunlti_d(i0, r0, i1)         dbw(SPARC_FBUL, i0, r0, i1)
-#  define bunler_d(i0, r0, r1)         dbr(SPARC_FBULE, i0, r0, r1)
-#  define bunlei_d(i0, r0, i1)         dbw(SPARC_FBULE, i0, r0, i1)
-#  define buneqr_d(i0, r0, r1)         dbr(SPARC_FBUE, i0, r0, r1)
-#  define buneqi_d(i0, r0, i1)         dbw(SPARC_FBUE, i0, r0, i1)
-#  define bunger_d(i0, r0, r1)         dbr(SPARC_FBUGE, i0, r0, r1)
-#  define bungei_d(i0, r0, i1)         dbw(SPARC_FBUGE, i0, r0, i1)
-#  define bungtr_d(i0, r0, r1)         dbr(SPARC_FBUG, i0, r0, r1)
-#  define bungti_d(i0, r0, i1)         dbw(SPARC_FBUG, i0, r0, i1)
-#  define bltgtr_d(i0, r0, r1)         dbr(SPARC_FBLG, i0, r0, r1)
-#  define bltgti_d(i0, r0, i1)         dbw(SPARC_FBLG, i0, r0, i1)
-#  define bordr_d(i0, r0, r1)          dbr(SPARC_FBO, i0, r0, r1)
-#  define bordi_d(i0, r0, i1)          dbw(SPARC_FBO, i0, r0, i1)
-#  define bunordr_d(i0, r0, r1)                dbr(SPARC_FBU, i0, r0, r1)
-#  define bunordi_d(i0, r0, i1)                dbw(SPARC_FBU, i0, r0, i1)
-#  define vaarg_d(r0, r1)              _vaarg_d(_jit, r0, r1)
-static void _vaarg_d(jit_state_t*, int32_t, int32_t);
-#endif
-
-#if CODE
-static void
-_f3f(jit_state_t *_jit, int32_t rd,
-     int32_t op3, int32_t rs1, int32_t opf, int32_t rs2)
-{
-    jit_instr_t                v;
-#  if __WORDSIZE == 64
-    if (rd > 31) {
-       assert(rd <= 63 && (rd & 1) == 0);
-       rd -= 31;
-    }
-    if (rs1 > 31) {
-       assert(rs1 <= 63 && (rs1 & 1) == 0);
-       rs1 -= 31;
-    }
-    if (rs2 > 31) {
-       assert(rs2 <= 63 && (rs2 & 1) == 0);
-       rs2 -= 31;
-    }
-#  endif
-    assert(!(rd  & 0xffffffe0));
-    assert(!(op3 & 0xffffffc0));
-    assert(!(rs1 & 0xffffffe0));
-    assert(!(opf & 0xfffffe00));
-    assert(!(rs2 & 0xffffffe0));
-    v.op.b    = 2;
-    v.rd.b    = rd;
-    v.op3.b   = op3;
-    v.rs1.b   = rs1;
-    v.opf.b   = opf;
-    v.rs2.b   = rs2;
-    ii(v.v);
-}
-
-#  if __WORDSIZE == 64
-static void
-_movr_f(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    int32_t            t0, t1;
-    if (r0 != r1) {
-       if (single_precision_p(r0)) {
-           if (single_precision_p(r1))
-               FMOVS(r1, r0);
-           else {
-               t1 = jit_get_reg(CLASS_SNG);
-               movr_d(rn(t1), r1);
-               FMOVS(rn(t1), r0);
-               jit_unget_reg(t1);
-           }
-       }
-       else {
-           if (single_precision_p(r1)) {
-               t0 = jit_get_reg(CLASS_SNG);
-               FMOVS(r1, rn(t0));
-               movr_d(r0, rn(t0));
-               jit_unget_reg(t0);
-           }
-           else {
-               t1 = jit_get_reg(CLASS_SNG);
-               movr_d(rn(t1), r1);
-               FMOVS(rn(t1), rn(t1));
-               movr_d(r0, rn(t1));
-               jit_unget_reg(t1);
-           }
-       }
-    }
-}
-
-static void
-_negr_f(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    int32_t            t0, t1;
-    if (single_precision_p(r0)) {
-       if (single_precision_p(r1))
-           FNEGS(r1, r0);
-       else {
-           t1 = jit_get_reg(CLASS_SNG);
-           movr_d(rn(t1), r1);
-           FNEGS(rn(t1), r0);
-           jit_unget_reg(t1);
-       }
-    }
-    else {
-       if (single_precision_p(r1)) {
-           t0 = jit_get_reg(CLASS_SNG);
-           FNEGS(r1, rn(t0));
-           movr_d(r0, rn(t0));
-           jit_unget_reg(t0);
-       }
-       else {
-           t1 = jit_get_reg(CLASS_SNG);
-           movr_d(rn(t1), r1);
-           FNEGS(rn(t1), rn(t1));
-           movr_d(r0, rn(t1));
-           jit_unget_reg(t1);
-       }
-    }
-}
-
-static void
-_absr_f(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    int32_t            t0, t1;
-    if (single_precision_p(r0)) {
-       if (single_precision_p(r1))
-           FABSS(r1, r0);
-       else {
-           t1 = jit_get_reg(CLASS_SNG);
-           movr_d(rn(t1), r1);
-           FABSS(rn(t1), r0);
-           jit_unget_reg(t1);
-       }
-    }
-    else {
-       if (single_precision_p(r1)) {
-           t0 = jit_get_reg(CLASS_SNG);
-           FABSS(r1, rn(t0));
-           movr_d(r0, rn(t0));
-           jit_unget_reg(t0);
-       }
-       else {
-           t1 = jit_get_reg(CLASS_SNG);
-           movr_d(rn(t1), r1);
-           FABSS(rn(t1), rn(t1));
-           movr_d(r0, rn(t1));
-           jit_unget_reg(t1);
-       }
-    }
-}
-
-static void
-_sqrtr_f(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    int32_t            t0, t1;
-    if (single_precision_p(r0)) {
-       if (single_precision_p(r1))
-           FSQRTS(r1, r0);
-       else {
-           t1 = jit_get_reg(CLASS_SNG);
-           movr_d(rn(t1), r1);
-           FSQRTS(rn(t1), r0);
-           jit_unget_reg(t1);
-       }
-    }
-    else {
-       if (single_precision_p(r1)) {
-           t0 = jit_get_reg(CLASS_SNG);
-           FSQRTS(r1, rn(t0));
-           movr_d(r0, rn(t0));
-           jit_unget_reg(t0);
-       }
-       else {
-           t1 = jit_get_reg(CLASS_SNG);
-           movr_d(rn(t1), r1);
-           FSQRTS(rn(t1), rn(t1));
-           movr_d(r0, rn(t1));
-           jit_unget_reg(t1);
-       }
-    }
-}
-#  endif
-
-#  if __WORDSIZE == 64
-static void
-_extr_d_f(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    int32_t            reg;
-    if (!single_precision_p(r0)) {
-       reg = jit_get_reg(CLASS_SNG);
-       movr_d(rn(reg), r0);
-       FDTOS(r1, rn(reg));
-       movr_d(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-    else
-       FDTOS(r1, r0);
-}
-#  endif
-
-static void
-_movi_f(jit_state_t *_jit, int32_t r0, jit_float32_t *i0)
-{
-    union {
-       int32_t  i;
-       jit_float32_t    f;
-    } data;
-    int32_t             reg;
-
-    if (_jitc->no_data) {
-       data.f = *i0;
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), data.i & 0xffffffff);
-       stxi_i(BIAS(-8), _FP_REGNO, rn(reg));
-       jit_unget_reg(reg);
-       ldxi_f(r0, _FP_REGNO, BIAS(-8));
-    }
-    else
-       ldi_f(r0, (jit_word_t)i0);
-}
-
-#  if __WORDSIZE == 64
-static void
-_extr_f_d(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    int32_t            reg;
-    if (!single_precision_p(r1)) {
-       reg = jit_get_reg(CLASS_SNG);
-       movr_d(rn(reg), r1);
-       FSTOD(rn(reg), r0);
-       jit_unget_reg(reg);
-    }
-    else
-       FSTOD(r1, r0);
-}
-#  endif
-
-static void
-_movi_d(jit_state_t *_jit, int32_t r0, jit_float64_t *i0)
-{
-    union {
-#  if __WORDSIZE == 32
-       int32_t  i[2];
-#  else
-       jit_word_t       w;
-#  endif
-       jit_float64_t    d;
-    } data;
-    int32_t             reg;
-
-    if (_jitc->no_data) {
-       data.d = *i0;
-       reg = jit_get_reg(jit_class_gpr);
-# if __WORDSIZE == 32
-       movi(rn(reg), data.i[0]);
-#  else
-       movi(rn(reg), data.w);
-#  endif
-       stxi(BIAS(-8), _FP_REGNO, rn(reg));
-#  if __WORDSIZE == 32
-       movi(rn(reg), data.i[1]);
-       stxi_i(BIAS(-4), _FP_REGNO, rn(reg));
-#  endif
-       jit_unget_reg(reg);
-       ldxi_d(r0, _FP_REGNO, BIAS(-8));
-    }
-    else
-       ldi_d(r0, (jit_word_t)i0);
-}
-
-#  if __WORDSIZE == 32
-static void
-_movr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    assert(!(r0 & 1));
-    assert(!(r1 & 1));
-    if (r0 != r1) {
-       FMOVS(r1, r0);
-       FMOVS(r1 + 1, r0 + 1);
-    }
-}
-
-static void
-_negr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    assert(!(r0 & 1));
-    assert(!(r1 & 1));
-    FNEGS(r1, r0);
-    if (r0 != r1)
-       FMOVS(r1 + 1, r0 + 1);
-}
-
-static void
-_absr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    assert(!(r0 & 1));
-    assert(!(r1 & 1));
-    FABSS(r1, r0);
-    if (r0 != r1)
-       FMOVS(r1 + 1, r0 + 1);
-}
-#  endif
-
-#  if __WORDSIZE == 64
-#    define single_rrr(NAME, CODE)                                     \
-static void                                                            \
-NAME(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)    \
-{                                                                      \
-    int32_t            x0, t0, x1, t1, x2, t2, mask = 0;               \
-    if (!single_precision_p(r0)) {                                     \
-       mask |= 1;                                                      \
-       t0 = jit_get_reg(CLASS_SNG);                                    \
-       x0 = rn(t0);                                                    \
-       if (r0 == r1) {                                                 \
-           x1 = x0;                                                    \
-           movr_d(x1, r1);                                             \
-           if (r0 == r2)                                               \
-               x2 = x0;                                                \
-       }                                                               \
-       else if (r0 == r2) {                                            \
-           x2 = x0;                                                    \
-           movr_d(x2, r2);                                             \
-       }                                                               \
-    }                                                                  \
-    else                                                               \
-       x0 = r0;                                                        \
-    if (!single_precision_p(r1)) {                                     \
-       if (r0 != r1) {                                                 \
-           mask |= 2;                                                  \
-           t1 = jit_get_reg(CLASS_SNG);                                \
-           x1 = rn(t1);                                                \
-           movr_d(x1, r1);                                             \
-           if (r1 == r2)                                               \
-               x2 = x1;                                                \
-       }                                                               \
-    }                                                                  \
-    else                                                               \
-       x1 = r1;                                                        \
-    if (!single_precision_p(r2)) {                                     \
-       if (r0 != r2 && r1 != r2) {                                     \
-           mask |= 4;                                                  \
-           t2 = jit_get_reg(CLASS_SNG);                                \
-           x2 = rn(t2);                                                \
-           movr_d(x2, r2);                                             \
-       }                                                               \
-    }                                                                  \
-    else                                                               \
-       x2 = r2;                                                        \
-    CODE(x1, x2, x0);                                                  \
-    if (mask & 1) {                                                    \
-       movr_d(r0, x0);                                                 \
-       jit_unget_reg(t0);                                              \
-    }                                                                  \
-    if (mask & 2)                                                      \
-       jit_unget_reg(t1);                                              \
-    if (mask & 4)                                                      \
-       jit_unget_reg(t2);                                              \
-}
-
-static void
-_fop2f(jit_state_t *_jit, int32_t op,
-       int32_t r0, int32_t r1, int32_t r2)
-{
-    int32_t            x0, t0, x1, t1, x2, t2, mask = 0;
-    if (!single_precision_p(r0)) {
-       mask |= 1;
-       t0 = jit_get_reg(CLASS_SNG);
-       x0 = rn(t0);
-       if (r0 == r1) {
-           x1 = x0;
-           movr_d(x1, r1);
-           if (r0 == r2)
-               x2 = x0;
-       }
-       else if (r0 == r2) {
-           x2 = x0;
-           movr_d(x2, r2);
-       }
-    }
-    else
-       x0 = r0;
-    if (!single_precision_p(r1)) {
-       if (r0 != r1) {
-           mask |= 2;
-           t1 = jit_get_reg(CLASS_SNG);
-           x1 = rn(t1);
-           movr_d(x1, r1);
-           if (r1 == r2)
-               x2 = x1;
-       }
-    }
-    else
-       x1 = r1;
-    if (!single_precision_p(r2)) {
-       if (r0 != r2 && r1 != r2) {
-           mask |= 4;
-           t2 = jit_get_reg(CLASS_SNG);
-           x2 = rn(t2);
-           movr_d(x2, r2);
-       }
-    }
-    else
-       x2 = r2;
-    FPop1(x0, x1,  op, x2);
-    if (mask & 1) {
-       movr_d(r0, x0);
-       jit_unget_reg(t0);
-    }
-    if (mask & 2)
-       jit_unget_reg(t1);
-    if (mask & 4)
-       jit_unget_reg(t2);
-}
-#  endif
-
-static void
-_fop1f(jit_state_t *_jit, int32_t op,
-       int32_t r0, int32_t r1, jit_float32_t *i0)
-{
-    int32_t            reg;
-#  if __WORDSIZE == 64
-    int32_t            x0, t0, x1, t1, mask = 0;
-#  endif
-    reg = jit_get_reg(CLASS_SNG);
-    movi_f(rn(reg), i0);
-#  if __WORDSIZE == 64
-    if (!single_precision_p(r0)) {
-       mask |= 1;
-       t0 = jit_get_reg(CLASS_SNG);
-       x0 = rn(t0);
-       if (r0 == r1) {
-           x1 = x0;
-           movr_d(x1, r1);
-       }
-    }
-    else
-       x0 = r0;
-    if (!single_precision_p(r1)) {
-       if (r0 != r1) {
-           mask |= 2;
-           t1 = jit_get_reg(CLASS_SNG);
-           x1 = rn(t1);
-           movr_d(x1, r1);
-       }
-    }
-    else
-       x1 = r1;
-    FPop1(x0, x1, op, rn(reg));
-    if (mask & 1) {
-       movr_d(r0, x0);
-       jit_unget_reg(t0);
-    }
-    if (mask & 2)
-       jit_unget_reg(t1);
-#  else
-    FPop1(r0, r1, op, rn(reg));
-#  endif
-    jit_unget_reg(reg);
-}
-
-static void
-_rfop1f(jit_state_t *_jit, int32_t op,
-       int32_t r0, int32_t r1, jit_float32_t *i0)
-{
-    int32_t            reg;
-#  if __WORDSIZE == 64
-    int32_t            x0, t0, x1, t1, mask = 0;
-#  endif
-    reg = jit_get_reg(CLASS_SNG);
-    movi_f(rn(reg), i0);
-#  if __WORDSIZE == 64
-    if (!single_precision_p(r0)) {
-       mask |= 1;
-       t0 = jit_get_reg(CLASS_SNG);
-       x0 = rn(t0);
-       if (r0 == r1) {
-           x1 = x0;
-           movr_d(x1, r1);
-       }
-    }
-    else
-       x0 = r0;
-    if (!single_precision_p(r1)) {
-       if (r0 != r1) {
-           mask |= 2;
-           t1 = jit_get_reg(CLASS_SNG);
-           x1 = rn(t1);
-           movr_d(x1, r1);
-       }
-    }
-    else
-       x1 = r1;
-    FPop1(x0, rn(reg), op, x1);
-    if (mask & 1) {
-       movr_d(r0, x0);
-       jit_unget_reg(t0);
-    }
-    if (mask & 2)
-       jit_unget_reg(t1);
-#  else
-    FPop1(r0, rn(reg), op, r1);
-#  endif
-    jit_unget_reg(reg);
-}
-
-static void
-_fop1d(jit_state_t *_jit, int32_t op,
-       int32_t r0, int32_t r1, jit_float64_t *i0)
-{
-    int32_t            reg;
-    reg = jit_get_reg(CLASS_DBL);
-    movi_d(rn(reg), i0);
-    FPop1(r0, r1, op, rn(reg));
-    jit_unget_reg(reg);
-}
-
-static void
-_rfop1d(jit_state_t *_jit, int32_t op,
-       int32_t r0, int32_t r1, jit_float64_t *i0)
-{
-    int32_t            reg;
-    reg = jit_get_reg(CLASS_DBL);
-    movi_d(rn(reg), i0);
-    FPop1(r0, rn(reg), op, r1);
-    jit_unget_reg(reg);
-}
-
-static void
-_extr_f(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    stxi(BIAS(-8), _FP_REGNO, r1);
-#  if __WORDSIZE == 32
-    ldxi_f(r0, _FP_REGNO, BIAS(-8));
-    FITOS(r0, r0);
-#  else
-    ldxi_d(r0, _FP_REGNO, BIAS(-8));
-    if (!single_precision_p(r0)) {
-       int32_t reg;
-       reg = jit_get_reg(CLASS_SNG);
-       movr_d(rn(reg), r0);
-       FXTOS(rn(reg), rn(reg));
-       movr_d(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-    else
-       FXTOS(r0, r0);
-#  endif
-}
-
-static void
-_truncr_f_i(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    int32_t            reg;
-    reg = jit_get_reg(CLASS_SNG);
-#  if __WORDSIZE == 64
-    if (!single_precision_p(r1)) {
-       movr_d(rn(reg), r1);
-       FSTOI(rn(reg), rn(reg));
-    }
-    else
-#  endif
-       FSTOI(r1, rn(reg));
-    stxi_f(BIAS(-8), _FP_REGNO, rn(reg));
-    ldxi_i(r0, _FP_REGNO, BIAS(-8));
-    jit_unget_reg(reg);
-}
-
-#  if __WORDSIZE == 64
-static void
-_truncr_f_l(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    int32_t            reg;
-    reg = jit_get_reg(CLASS_SNG);
-#  if __WORDSIZE == 64
-    if (!single_precision_p(r1)) {
-       movr_d(rn(reg), r1);
-       FSTOX(rn(reg), rn(reg));
-    }
-    else
-#  endif
-       FSTOX(r1, rn(reg));
-    stxi_d(BIAS(-8), _FP_REGNO, rn(reg));
-    ldxi_l(r0, _FP_REGNO, BIAS(-8));
-    jit_unget_reg(reg);
-}
-#  endif
-
-static void
-_fcr(jit_state_t *_jit, int32_t cc,
-     int32_t r0, int32_t r1, int32_t r2)
-{
-#  if __WORDSIZE == 64
-    int32_t            x0, t0, x1, t1, mask = 0;
-    if (!single_precision_p(r1)) {
-       mask |= 1;
-       t0 = jit_get_reg(CLASS_SNG);
-       x0 = rn(t0);
-       movr_d(x0, r1);
-    }
-    else
-       x0 = r1;
-    if (r1 == r2)
-       x1 = x0;
-    else if (!single_precision_p(r2)) {
-       mask |= 2;
-       t1 = jit_get_reg(CLASS_SNG);
-       x1 = rn(t1);
-       movr_d(x1, r2);
-    }
-    else
-       x1 = r2;
-    FCMPS(x0, x1);
-    if (mask & 1)
-       jit_unget_reg(t0);
-    if (mask & 2)
-       jit_unget_reg(t1);
-#  else
-    FCMPS(r1, r2);
-#  endif
-    FBa(cc, 3);
-    movi(r0, 1);
-    movi(r0, 0);
-}
-
-static void
-_fcw(jit_state_t *_jit, int32_t cc,
-     int32_t r0, int32_t r1, jit_float32_t *i0)
-{
-    int32_t            reg;
-#  if __WORDSIZE == 64
-    int32_t            x0, t0, mask = 0;
-    if (!single_precision_p(r1)) {
-       mask |= 1;
-       t0 = jit_get_reg(CLASS_SNG);
-       x0 = rn(t0);
-       movr_d(x0, r1);
-    }
-    else
-       x0 = r1;
-#  endif
-    reg = jit_get_reg(CLASS_SNG);
-    movi_f(rn(reg), i0);
-#  if __WORDSIZE == 64
-    FCMPS(x0, rn(reg));
-    if (mask & 1)
-       jit_unget_reg(t0);
-#  else
-    FCMPS(r1, rn(reg));
-#  endif
-    jit_unget_reg(reg);
-    FBa(cc, 3);
-    movi(r0, 1);
-    movi(r0, 0);
-}
-
-static void
-_dcr(jit_state_t *_jit, int32_t cc,
-     int32_t r0, int32_t r1, int32_t r2)
-{
-    FCMPD(r1, r2);
-    FBa(cc, 3);
-    movi(r0, 1);
-    movi(r0, 0);
-}
-
-static void
-_dcw(jit_state_t *_jit, int32_t cc,
-     int32_t r0, int32_t r1, jit_float64_t *i0)
-{
-    int32_t            reg;
-    reg = jit_get_reg(CLASS_DBL);
-    movi_d(rn(reg), i0);
-    FCMPD(r1, rn(reg));
-    jit_unget_reg(reg);
-    FBa(cc, 3);
-    movi(r0, 1);
-    movi(r0, 0);
-}
-
-#  if __WORDSIZE == 64
-static void
-_ldr_f(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    int32_t            reg;
-    if (!single_precision_p(r0)) {
-       reg = jit_get_reg(CLASS_SNG);
-       LDF(r1, 0, rn(reg));
-       movr_d(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-    else
-       LDF(r1, 0, r0);
-}
-#  endif
-
-static void
-_ldi_f(jit_state_t *_jit, int32_t r0, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0)) {
-#  if __WORDSIZE == 64
-       if (!single_precision_p(r0)) {
-           reg = jit_get_reg(CLASS_SNG);
-           LDFI(0, i0, rn(reg));
-           movr_d(r0, rn(reg));
-           jit_unget_reg(reg);
-       }
-       else
-#  endif
-           LDFI(0, i0, r0);
-    }
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldr_f(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-#  if __WORDSIZE == 64
-static void
-_ldxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
-    int32_t            reg;
-    if (!single_precision_p(r0)) {
-       reg = jit_get_reg(CLASS_SNG);
-       LDF(r1, r2, rn(reg));
-       movr_d(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-    else
-       LDF(r1, r2, r0);
-}
-#  endif
-
-static void
-_ldxi_f(jit_state_t *_jit, int32_t r0, int32_t r1, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0)) {
-#  if __WORDSIZE == 64
-       if (!single_precision_p(r0)) {
-           reg = jit_get_reg(CLASS_SNG);
-           LDFI(r1, i0, rn(reg));
-           movr_d(r0, rn(reg));
-           jit_unget_reg(reg);
-       }
-       else
-#  endif
-           LDFI(r1, i0, r0);
-    }
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldxr_f(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-#  if __WORDSIZE == 64
-static void
-_str_f(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    int32_t            reg;
-    if (!single_precision_p(r1)) {
-       reg = jit_get_reg(CLASS_SNG);
-       movr_d(rn(reg), r1);
-       STF(rn(reg), r0, 0);
-       jit_unget_reg(reg);
-    }
-    else
-       STF(r1, r0, 0);
-}
-# endif
-
-static void
-_sti_f(jit_state_t *_jit, jit_word_t i0, int32_t r0)
-{
-    int32_t            reg;
-    if (s13_p(i0)) {
-#  if __WORDSIZE == 64
-       if (!single_precision_p(r0)) {
-           reg = jit_get_reg(CLASS_SNG);
-           movr_d(rn(reg), r0);
-           STFI(rn(reg), 0, i0);
-           jit_unget_reg(reg);
-       }
-       else
-#  endif
-           STFI(r0, 0, i0);
-    }
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       str_f(rn(reg), r0);
-       jit_unget_reg(reg);
-    }
-}
-
-#  if __WORDSIZE == 64
-static void
-_stxr_f(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t r2)
-{
-    int32_t            reg;
-    if (!single_precision_p(r2)) {
-       reg = jit_get_reg(CLASS_SNG);
-       movr_d(rn(reg), r2);
-       STF(rn(reg), r1, r0);
-       jit_unget_reg(reg);
-    }
-    else
-       STF(r2, r1, r0);
-}
-# endif
-
-static void
-_stxi_f(jit_state_t *_jit, jit_word_t i0, int32_t r0, int32_t r1)
-{
-    int32_t            reg;
-    if (s13_p(i0)) {
-#  if __WORDSIZE == 64
-       if (!single_precision_p(r1)) {
-           reg = jit_get_reg(CLASS_SNG);
-           movr_d(rn(reg), r1);
-           STFI(rn(reg), r0, i0);
-           jit_unget_reg(reg);
-       }
-       else
-#  endif
-           STFI(r1, r0, i0);
-    }
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       stxr_f(rn(reg), r0, r1);
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_extr_d(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    stxi(BIAS(-8), _FP_REGNO, r1);
-#  if __WORDSIZE == 32
-    stxi(BIAS(-4), _FP_REGNO, 0);
-#  endif
-    ldxi_d(r0, _FP_REGNO, BIAS(-8));
-#  if __WORDSIZE == 32
-    FITOD(r0, r0);
-#  else
-    FXTOD(r0, r0);
-#  endif
-}
-
-static void
-_truncr_d_i(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    int32_t            reg;
-    reg = jit_get_reg(CLASS_SNG);
-#  if __WORDSIZE == 64
-    if (!single_precision_p(r1)) {
-       movr_d(rn(reg), r1);
-       FDTOI(rn(reg), rn(reg));
-    }
-    else
-#  endif
-       FDTOI(r1, rn(reg));
-    stxi_d(BIAS(-8), _FP_REGNO, rn(reg));
-    ldxi_i(r0, _FP_REGNO, BIAS(-8));
-    jit_unget_reg(reg);
-}
-
-#  if __WORDSIZE == 64
-static void
-_truncr_d_l(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    int32_t            reg;
-    reg = jit_get_reg(CLASS_DBL);
-    FDTOX(r1, rn(reg));
-    stxi_d(BIAS(-8), _FP_REGNO, rn(reg));
-    ldxi_l(r0, _FP_REGNO, BIAS(-8));
-    jit_unget_reg(reg);
-}
-#  endif
-
-static void
-_ldi_d(jit_state_t *_jit, int32_t r0, jit_word_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       LDDFI(0, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldr_d(r0, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_ldxi_d(jit_state_t *_jit, int32_t r0, int32_t r1, int32_t i0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       LDDFI(r1, i0, r0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       ldxr_d(r0, r1, rn(reg));
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_sti_d(jit_state_t *_jit, jit_word_t i0, int32_t r0)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       STDFI(r0, 0, i0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       str_d(rn(reg), r0);
-       jit_unget_reg(reg);
-    }
-}
-
-static void
-_stxi_d(jit_state_t *_jit, int32_t i0, int32_t r0, int32_t r1)
-{
-    int32_t            reg;
-    if (s13_p(i0))
-       STDFI(r1, r0, i0);
-    else {
-       reg = jit_get_reg(jit_class_gpr);
-       movi(rn(reg), i0);
-       stxr_d(rn(reg), r0, r1);
-       jit_unget_reg(reg);
-    }
-}
-
-static jit_word_t
-_fbr(jit_state_t *_jit, int32_t cc,
-     jit_word_t i0, int32_t r0,int32_t r1)
-{
-#  if __WORDSIZE == 64
-    int32_t            x0, t0, x1, t1, mask = 0;
-#  endif
-    jit_word_t         w;
-#  if __WORDSIZE == 64
-    if (!single_precision_p(r0)) {
-       mask |= 1;
-       t0 = jit_get_reg(CLASS_SNG);
-       x0 = rn(t0);
-       movr_d(x0, r0);
-    }
-    else
-       x0 = r0;
-    if (r0 == r1)
-       x1 = x0;
-    else if (!single_precision_p(r1)) {
-       mask |= 2;
-       t1 = jit_get_reg(CLASS_SNG);
-       x1 = rn(t1);
-       movr_d(x1, r1);
-    }
-    else
-       x1 = r1;
-    FCMPS(x0, x1);
-    if (mask & 1)
-       jit_unget_reg(t0);
-    if (mask & 2)
-       jit_unget_reg(t1);
-#  else
-    FCMPS(r0, r1);
-#  endif
-    w = _jit->pc.w;
-    FB(cc, (i0 - w) >> 2);
-    NOP();
-    return (w);
-}
-
-static jit_word_t
-_fbw(jit_state_t *_jit, int32_t cc,
-     jit_word_t i0, int32_t r0, jit_float32_t *i1)
-{
-    jit_word_t         w;
-    int32_t            reg;
-#  if __WORDSIZE == 64
-    int32_t            x0, t0, mask = 0;
-    if (!single_precision_p(r0)) {
-       mask |= 1;
-       t0 = jit_get_reg(CLASS_SNG);
-       x0 = rn(t0);
-       movr_d(x0, r0);
-    }
-    else
-       x0 = r0;
-#  endif
-    reg = jit_get_reg(CLASS_SNG);
-    movi_f(rn(reg), i1);
-#  if __WORDSIZE == 64
-    FCMPS(x0, rn(reg));
-    if (mask & 1)
-       jit_unget_reg(t0);
-#  else
-    FCMPS(r0, rn(reg));
-#  endif
-    jit_unget_reg(reg);
-    w = _jit->pc.w;
-    FB(cc, (i0 - w) >> 2);
-    NOP();
-    return (w);
-}
-
-static jit_word_t
-_dbr(jit_state_t *_jit, int32_t cc,
-     jit_word_t i0, int32_t r0, int32_t r1)
-{
-    jit_word_t         w;
-    FCMPD(r0, r1);
-    w = _jit->pc.w;
-    FB(cc, (i0 - w) >> 2);
-    NOP();
-    return (w);
-}
-
-static jit_word_t
-_dbw(jit_state_t *_jit, int32_t cc,
-     jit_word_t i0, int32_t r0, jit_float64_t *i1)
-{
-    jit_word_t         w;
-    int32_t            reg;
-    reg = jit_get_reg(CLASS_DBL);
-    movi_d(rn(reg), i1);
-    FCMPD(r0, rn(reg));
-    jit_unget_reg(reg);
-    w = _jit->pc.w;
-    FB(cc, (i0 - w) >> 2);
-    NOP();
-    return (w);
-}
-
-static void
-_vaarg_d(jit_state_t *_jit, int32_t r0, int32_t r1)
-{
-    assert(_jitc->function->self.call & jit_call_varargs);
-
-    /* Load argument. */
-    ldr_d(r0, r1);
-
-    /* Update vararg stack pointer. */
-    addi(r1, r1, 8);
-}
-#endif
diff --git a/lightening/sparc.c b/lightening/sparc.c
deleted file mode 100644
index 415f213..0000000
--- a/lightening/sparc.c
+++ /dev/null
@@ -1,1948 +0,0 @@
-/*
- * Copyright (C) 2013-2019  Free Software Foundation, Inc.
- *
- * This file is part of GNU lightning.
- *
- * GNU lightning is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU lightning is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
- * License for more details.
- *
- * Authors:
- *     Paulo Cesar Pereira de Andrade
- */
-
-# define JIT_SP         _SP
-# define JIT_RET                _I0
-# define JIT_FRET               _F0
-/*
- * Copyright (C) 2013-2018  Free Software Foundation, Inc.
- *
- * This file is part of GNU lightning.
- *
- * GNU lightning is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU lightning is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
- * License for more details.
- *
- * Authors:
- *     Paulo Cesar Pereira de Andrade
- */
-
-#define jit_arg_reg_p(i)               ((i) >= 0 && (i) < 6)
-#if __WORDSIZE == 32
-#  define jit_arg_d_reg_p(i)           ((i) >= 0 && (i) < 5)
-#  define BIAS(n)                      (n)
-#else
-#  define jit_arg_d_reg_p(i)           ((i) >= 0 && (i) < 16)
-#  define BIAS(n)                      ((n) + 2047)
-#endif
-
-/*
- * Types
- */
-typedef jit_pointer_t  jit_va_list_t;
-
-/*
- * Prototypes
- */
-#define patch(instr, node)             _patch(_jit, instr, node)
-static void _patch(jit_state_t*,jit_word_t,jit_node_t*);
-
-#define PROTO                          1
-#  include "sparc-cpu.c"
-#  include "sparc-fpu.c"
-#undef PROTO
-
-/*
- * Initialization
- */
-static const jit_register_t _rvs[] = {
-    { 0x00,                            "%g0" },
-    { 0x01,                            "%g1" },
-    { rc(gpr) | 0x02,                  "%g2" },
-    { rc(gpr) | 0x03,                  "%g3" },
-    { rc(gpr) | 0x04,                  "%g4" },
-    { 0x05,                            "%g5" },
-    { 0x06,                            "%g6" },
-    { 0x07,                            "%g7" },
-    { rc(arg) | rc(gpr) | 0x08,                "%o0" },
-    { rc(arg) | rc(gpr) | 0x09,                "%o1" },
-    { rc(arg) | rc(gpr) | 0x0a,                "%o2" },
-    { rc(arg) | rc(gpr) | 0x0b,                "%o3" },
-    { rc(arg) | rc(gpr) | 0x0c,                "%o4" },
-    { rc(arg) | rc(gpr) | 0x0d,                "%o5" },
-    { rc(sav) | 0x0e,                  "%sp" },
-    { 0x0f,                            "%o7" },
-    { rc(sav) | rc(gpr) | 0x10,                "%l0" },
-    { rc(sav) | rc(gpr) | 0x11,                "%l1" },
-    { rc(sav) | rc(gpr) | 0x12,                "%l2" },
-    { rc(sav) | rc(gpr) | 0x13,                "%l3" },
-    { rc(sav) | rc(gpr) | 0x14,                "%l4" },
-    { rc(sav) | rc(gpr) | 0x15,                "%l5" },
-    { rc(sav) | rc(gpr) | 0x16,                "%l6" },
-    { rc(sav) | rc(gpr) | 0x17,                "%l7" },
-    { 0x18,                            "%i0" },
-    { 0x19,                            "%i1" },
-    { 0x1a,                            "%i2" },
-    { 0x1b,                            "%i3" },
-    { 0x1c,                            "%i4" },
-    { 0x1d,                            "%i5" },
-    { rc(sav) | 0x1e,                  "%fp" },
-    { 0x1f,                            "%i7" },
-#  if __WORDSIZE == 32
-    { rc(fpr) | 0x00,                  "%f0" },
-    { 0x01,                            "%f1" },
-    { rc(fpr) | 0x02,                  "%f2" },
-    { 0x03,                            "%f3" },
-    { rc(fpr) | 0x04,                  "%f4" },
-    { 0x05,                            "%f5" },
-    { rc(fpr) | 0x06,                  "%f6" },
-    { 0x07,                            "%f7" },
-    { rc(fpr) | 0x08,                  "%f8" },
-    { 0x09,                            "%f9" },
-    { rc(fpr) | 0x0a,                  "%f10" },
-    { 0x0b,                            "%f11" },
-    { rc(fpr) | 0x0c,                  "%f12" },
-    { 0x0d,                            "%f13" },
-    { rc(fpr) | 0x0e,                  "%f14" },
-    { 0x0f,                            "%f15" },
-#  else
-    { rc(fpr) | rc(dbl) | 0x3e,                "%f62" },
-    { rc(fpr) | rc(dbl) | 0x3c,                "%f60" },
-    { rc(fpr) | rc(dbl) | 0x3a,                "%f58" },
-    { rc(fpr) | rc(dbl) | 0x38,                "%f56" },
-    { rc(fpr) | rc(dbl) | 0x36,                "%f54" },
-    { rc(fpr) | rc(dbl) | 0x34,                "%f52" },
-    { rc(fpr) | rc(dbl) | 0x32,                "%f50" },
-    { rc(fpr) | rc(dbl) | 0x30,                "%f48" },
-    { rc(fpr) | rc(dbl) | 0x2e,                "%f46" },
-    { rc(fpr) | rc(dbl) | 0x2c,                "%f44" },
-    { rc(fpr) | rc(dbl) | 0x2a,                "%f42" },
-    { rc(fpr) | rc(dbl) | 0x28,                "%f40" },
-    { rc(fpr) | rc(dbl) | 0x26,                "%f38" },
-    { rc(fpr) | rc(dbl) | 0x24,                "%f36" },
-    { rc(fpr) | rc(dbl) | 0x22,                "%f34" },
-    { rc(fpr) | rc(dbl) | 0x20,                "%f32" },
-    { 0x1f,                            "%f31" },
-    { rc(arg)|rc(fpr)|rc(sng)|0x1e,    "%f30" },
-    { 0x1d,                            "%f29" },
-    { rc(arg)|rc(fpr)|rc(sng)|0x1c,    "%f28" },
-    { 0x1b,                            "%f27" },
-    { rc(arg)|rc(fpr)|rc(sng)|0x1a,    "%f26" },
-    { 0x19,                            "%f25" },
-    { rc(arg)|rc(fpr)|rc(sng)|0x18,    "%f24" },
-    { 0x17,                            "%f23" },
-    { rc(arg)|rc(fpr)|rc(sng)|0x16,    "%f22" },
-    { 0x15,                            "%f21" },
-    { rc(arg)|rc(fpr)|rc(sng)|0x14,    "%f20" },
-    { 0x13,                            "%f19" },
-    { rc(arg)|rc(fpr)|rc(sng)|0x12,    "%f18" },
-    { 0x11,                            "%f17" },
-    { rc(arg)|rc(fpr)|rc(sng)|0x10,    "%f16" },
-    { 0x0f,                            "%f15" },
-    { rc(arg)|rc(fpr)|rc(sng)|0x0e,    "%f14" },
-    { 0x0d,                            "%f13" },
-    { rc(arg)|rc(fpr)|rc(sng)|0x0c,    "%f12" },
-    { 0x0b,                            "%f11" },
-    { rc(arg)|rc(fpr)|rc(sng)|0x0a,    "%f10" },
-    { 0x09,                            "%f9" },
-    { rc(arg)|rc(fpr)|rc(sng)|0x08,    "%f8" },
-    { 0x07,                            "%f7" },
-    { rc(arg)|rc(fpr)|rc(sng)|0x06,    "%f6" },
-    { 0x05,                            "%f5" },
-    { rc(arg)|rc(fpr)|rc(sng)|0x04,    "%f4" },
-    { 0x03,                            "%f3" },
-    { rc(arg)|rc(fpr)|rc(sng)|0x02,    "%f2" },
-    { 0x01,                            "%f1" },
-    { rc(arg)|rc(fpr)|rc(sng)|0x00,    "%f0" },
-#  endif
-    { _NOREG,                          "<none>" },
-};
-
-/*
- * Implementation
- */
-void
-jit_get_cpu(void)
-{
-}
-
-void
-_jit_init(jit_state_t *_jit)
-{
-    _jitc->reglen = jit_size(_rvs) - 1;
-#  if __WORDSIZE == 64
-    jit_carry = _NOREG;
-#  endif
-}
-
-void
-_jit_prolog(jit_state_t *_jit)
-{
-    int32_t             offset;
-
-    if (_jitc->function)
-       jit_epilog();
-    assert(jit_regset_cmp_ui(&_jitc->regarg, 0) == 0);
-    jit_regset_set_ui(&_jitc->regsav, 0);
-    offset = _jitc->functions.offset;
-    if (offset >= _jitc->functions.length) {
-       jit_realloc((jit_pointer_t *)&_jitc->functions.ptr,
-                   _jitc->functions.length * sizeof(jit_function_t),
-                   (_jitc->functions.length + 16) * sizeof(jit_function_t));
-       _jitc->functions.length += 16;
-    }
-    _jitc->function = _jitc->functions.ptr + _jitc->functions.offset++;
-    _jitc->function->self.size = stack_framesize;
-    _jitc->function->self.argi = _jitc->function->self.argf =
-       _jitc->function->self.aoff = _jitc->function->self.alen = 0;
-    /* float conversion */
-#  if __WORDSIZE == 32
-    _jitc->function->self.aoff = -8;
-#  else
-    /* extra slots in case qmul is called */
-    _jitc->function->self.aoff = -24;
-#  endif
-     _jitc->function->self.call = jit_call_default;
-    jit_alloc((jit_pointer_t *)&_jitc->function->regoff,
-             _jitc->reglen * sizeof(int32_t));
-
-    /* _no_link here does not mean the jit_link() call can be removed
-     * by rewriting as:
-     * _jitc->function->prolog = jit_new_node(jit_code_prolog);
-     */
-    _jitc->function->prolog = jit_new_node_no_link(jit_code_prolog);
-    jit_link(_jitc->function->prolog);
-    _jitc->function->prolog->w.w = offset;
-    _jitc->function->epilog = jit_new_node_no_link(jit_code_epilog);
-    /* u:      label value
-     * v:      offset in blocks vector
-     * w:      offset in functions vector
-     */
-    _jitc->function->epilog->w.w = offset;
-
-    jit_regset_new(&_jitc->function->regset);
-}
-
-int32_t
-_jit_allocai(jit_state_t *_jit, int32_t length)
-{
-    assert(_jitc->function);
-    switch (length) {
-       case 0: case 1:                                         break;
-       case 2:         _jitc->function->self.aoff &= -2;       break;
-       case 3: case 4: _jitc->function->self.aoff &= -4;       break;
-       default:        _jitc->function->self.aoff &= -8;       break;
-    }
-    _jitc->function->self.aoff -= length;
-    if (!_jitc->realize) {
-       jit_inc_synth_ww(allocai, _jitc->function->self.aoff, length);
-       jit_dec_synth();
-    }
-    return (BIAS(_jitc->function->self.aoff));
-}
-
-void
-_jit_allocar(jit_state_t *_jit, int32_t u, int32_t v)
-{
-    int32_t             reg;
-    assert(_jitc->function);
-    jit_inc_synth_ww(allocar, u, v);
-    if (!_jitc->function->allocar) {
-       _jitc->function->aoffoff = jit_allocai(sizeof(int32_t));
-       _jitc->function->allocar = 1;
-    }
-    reg = jit_get_reg(jit_class_gpr);
-    jit_negr(reg, v);
-    jit_andi(reg, reg, -16);
-    jit_ldxi_i(u, JIT_FP, _jitc->function->aoffoff);
-    jit_addr(u, u, reg);
-    jit_addr(_SP, _SP, reg);
-    jit_stxi_i(_jitc->function->aoffoff, JIT_FP, u);
-    jit_unget_reg(reg);
-    jit_dec_synth();
-}
-
-void
-_jit_ret(jit_state_t *_jit)
-{
-    jit_node_t         *instr;
-    assert(_jitc->function);
-    jit_inc_synth(ret);
-    /* jump to epilog */
-    instr = jit_jmpi();
-    jit_patch_at(instr, _jitc->function->epilog);
-    jit_dec_synth();
-}
-
-void
-_jit_retr(jit_state_t *_jit, int32_t u)
-{
-    jit_inc_synth_w(retr, u);
-    if (JIT_RET != u)
-       jit_movr(JIT_RET, u);
-    jit_live(JIT_RET);
-    jit_ret();
-    jit_dec_synth();
-}
-
-void
-_jit_reti(jit_state_t *_jit, jit_word_t u)
-{
-    jit_inc_synth_w(reti, u);
-    jit_movi(JIT_RET, u);
-    jit_ret();
-    jit_dec_synth();
-}
-
-void
-_jit_retr_f(jit_state_t *_jit, int32_t u)
-{
-    jit_inc_synth_w(retr_f, u);
-    if (JIT_FRET != u)
-       jit_movr_f(JIT_FRET, u);
-    else
-       jit_live(JIT_FRET);
-    jit_ret();
-    jit_dec_synth();
-}
-
-void
-_jit_reti_f(jit_state_t *_jit, jit_float32_t u)
-{
-    jit_inc_synth_f(reti_f, u);
-    jit_movi_f(JIT_FRET, u);
-    jit_ret();
-    jit_dec_synth();
-}
-
-void
-_jit_retr_d(jit_state_t *_jit, int32_t u)
-{
-    jit_inc_synth_w(retr_d, u);
-    if (JIT_FRET != u)
-       jit_movr_d(JIT_FRET, u);
-    else
-       jit_live(JIT_FRET);
-    jit_ret();
-    jit_dec_synth();
-}
-
-void
-_jit_reti_d(jit_state_t *_jit, jit_float64_t u)
-{
-    jit_inc_synth_d(reti_d, u);
-    jit_movi_d(JIT_FRET, u);
-    jit_ret();
-    jit_dec_synth();
-}
-
-void
-_jit_epilog(jit_state_t *_jit)
-{
-    assert(_jitc->function);
-    assert(_jitc->function->epilog->next == NULL);
-    jit_link(_jitc->function->epilog);
-    _jitc->function = NULL;
-}
-
-jit_bool_t
-_jit_arg_register_p(jit_state_t *_jit, jit_node_t *u)
-{
-#  if __WORDSIZE == 32
-    if (u->code == jit_code_arg || u->code == jit_code_arg_f)
-       return (jit_arg_reg_p(u->u.w));
-    assert(u->code == jit_code_arg_d);
-    return (jit_arg_d_reg_p(u->u.w));
-#  else
-    if (u->code == jit_code_arg)
-       return (jit_arg_reg_p(u->u.w));
-    assert(u->code == jit_code_arg_d || u->code == jit_code_arg_f);
-    return (jit_arg_d_reg_p(u->u.w));
-#  endif
-}
-
-void
-_jit_ellipsis(jit_state_t *_jit)
-{
-    jit_inc_synth(ellipsis);
-    if (_jitc->prepare) {
-       jit_link_prepare();
-       assert(!(_jitc->function->call.call & jit_call_varargs));
-       _jitc->function->call.call |= jit_call_varargs;
-    }
-    else {
-       jit_link_prolog();
-       assert(!(_jitc->function->self.call & jit_call_varargs));
-       _jitc->function->self.call |= jit_call_varargs;
-
-       _jitc->function->vagp = _jitc->function->self.argi;
-    }
-    jit_dec_synth();
-}
-
-void
-_jit_va_push(jit_state_t *_jit, int32_t u)
-{
-    jit_inc_synth_w(va_push, u);
-    jit_pushargr(u);
-    jit_dec_synth();
-}
-
-jit_node_t *
-_jit_arg(jit_state_t *_jit)
-{
-    jit_node_t         *node;
-    int32_t             offset;
-    assert(_jitc->function);
-    if (jit_arg_reg_p(_jitc->function->self.argi))
-       offset = _jitc->function->self.argi++;
-    else {
-#  if __WORDSIZE == 64
-       if (jit_arg_d_reg_p(_jitc->function->self.argi))
-           ++_jitc->function->self.argi;
-#   endif
-       offset = BIAS(_jitc->function->self.size);
-       _jitc->function->self.size += sizeof(jit_word_t);
-    }
-    node = jit_new_node_ww(jit_code_arg, offset,
-                          ++_jitc->function->self.argn);
-    jit_link_prolog();
-    return (node);
-}
-
-jit_node_t *
-_jit_arg_f(jit_state_t *_jit)
-{
-    jit_node_t         *node;
-    int32_t             offset;
-#  if __WORDSIZE == 64
-    jit_bool_t          inc;
-#  endif
-    assert(_jitc->function);
-#  if __WORDSIZE == 32
-    if (jit_arg_reg_p(_jitc->function->self.argi))
-       offset = _jitc->function->self.argi++;
-    else {
-       offset = _jitc->function->self.size;
-       _jitc->function->self.size += sizeof(jit_word_t);
-    }
-#  else
-    inc = !jit_arg_reg_p(_jitc->function->self.argi);
-    if (jit_arg_d_reg_p(_jitc->function->self.argi))
-       offset = _jitc->function->self.argi++;
-    else
-       offset = BIAS(_jitc->function->self.size);
-    if (inc)
-       _jitc->function->self.size += sizeof(jit_word_t);
-#  endif
-    node = jit_new_node_ww(jit_code_arg_f, offset,
-                          ++_jitc->function->self.argn);
-    jit_link_prolog();
-    return (node);
-}
-
-jit_node_t *
-_jit_arg_d(jit_state_t *_jit)
-{
-    jit_node_t         *node;
-    int32_t             offset;
-#  if __WORDSIZE == 64
-    jit_bool_t          inc;
-#  endif
-    assert(_jitc->function);
-#  if __WORDSIZE == 32
-    if (jit_arg_d_reg_p(_jitc->function->self.argi)) {
-       offset = _jitc->function->self.argi;
-       _jitc->function->self.argi += 2;
-    }
-    else if (jit_arg_reg_p(_jitc->function->self.argi)) {
-       offset = _jitc->function->self.argi++;
-       _jitc->function->self.size += sizeof(jit_float32_t);
-    }
-    else {
-       offset = _jitc->function->self.size;
-       _jitc->function->self.size += sizeof(jit_float64_t);
-    }
-#  else
-    inc = !jit_arg_reg_p(_jitc->function->self.argi);
-    if (jit_arg_d_reg_p(_jitc->function->self.argi))
-       offset = _jitc->function->self.argi++;
-    else
-       offset = BIAS(_jitc->function->self.size);
-    if (inc)
-       _jitc->function->self.size += sizeof(jit_word_t);
-#  endif
-    node = jit_new_node_ww(jit_code_arg_d, offset,
-                          ++_jitc->function->self.argn);
-    jit_link_prolog();
-    return (node);
-}
-
-void
-_jit_getarg_c(jit_state_t *_jit, int32_t u, jit_node_t *v)
-{
-    assert(v->code == jit_code_arg);
-    jit_inc_synth_wp(getarg_c, u, v);
-    if (jit_arg_reg_p(v->u.w))
-       jit_extr_c(u, _I0 + v->u.w);
-    else
-       jit_ldxi_c(u, JIT_FP,
-                  v->u.w + (__WORDSIZE >> 3) - sizeof(int8_t));
-    jit_dec_synth();
-}
-
-void
-_jit_getarg_uc(jit_state_t *_jit, int32_t u, jit_node_t *v)
-{
-    assert(v->code == jit_code_arg);
-    jit_inc_synth_wp(getarg_uc, u, v);
-    if (jit_arg_reg_p(v->u.w))
-       jit_extr_uc(u, _I0 + v->u.w);
-    else
-       jit_ldxi_uc(u, JIT_FP,
-                   v->u.w + (__WORDSIZE >> 3) - sizeof(uint8_t));
-    jit_dec_synth();
-}
-
-void
-_jit_getarg_s(jit_state_t *_jit, int32_t u, jit_node_t *v)
-{
-    assert(v->code == jit_code_arg);
-    jit_inc_synth_wp(getarg_s, u, v);
-    if (jit_arg_reg_p(v->u.w))
-       jit_extr_s(u, _I0 + v->u.w);
-    else
-       jit_ldxi_s(u, JIT_FP,
-                  v->u.w + (__WORDSIZE >> 3) - sizeof(int16_t));
-    jit_dec_synth();
-}
-
-void
-_jit_getarg_us(jit_state_t *_jit, int32_t u, jit_node_t *v)
-{
-    assert(v->code == jit_code_arg);
-    jit_inc_synth_wp(getarg_us, u, v);
-    if (jit_arg_reg_p(v->u.w))
-       jit_extr_us(u, _I0 + v->u.w);
-    else
-       jit_ldxi_us(u, JIT_FP,
-                   v->u.w + (__WORDSIZE >> 3) - sizeof(uint16_t));
-    jit_dec_synth();
-}
-
-void
-_jit_getarg_i(jit_state_t *_jit, int32_t u, jit_node_t *v)
-{
-    assert(v->code == jit_code_arg);
-    jit_inc_synth_wp(getarg_i, u, v);
-    if (jit_arg_reg_p(v->u.w)) {
-#  if __WORDSIZE == 64
-       jit_extr_i(u, _I0 + v->u.w);
-#  else
-       jit_movr(u, _I0 + v->u.w);
-#  endif
-    }
-    else
-       jit_ldxi_i(u, JIT_FP,
-                  v->u.w + (__WORDSIZE >> 3) - sizeof(int32_t));
-    jit_dec_synth();
-}
-
-#  if __WORDSIZE == 64
-void
-_jit_getarg_ui(jit_state_t *_jit, int32_t u, jit_node_t *v)
-{
-    assert(v->code == jit_code_arg);
-    jit_inc_synth_wp(getarg_i, u, v);
-    if (jit_arg_reg_p(v->u.w))
-       jit_extr_ui(u, _I0 + v->u.w);
-    else
-       jit_ldxi_ui(u, JIT_FP,
-                   v->u.w + (__WORDSIZE >> 3) - sizeof(int32_t));
-    jit_dec_synth();
-}
-
-void
-_jit_getarg_l(jit_state_t *_jit, int32_t u, jit_node_t *v)
-{
-    assert(v->code == jit_code_arg);
-    jit_inc_synth_wp(getarg_i, u, v);
-    if (jit_arg_reg_p(v->u.w))
-       jit_movr(u, _I0 + v->u.w);
-    else
-       jit_ldxi_l(u, JIT_FP, v->u.w);
-    jit_dec_synth();
-}
-#  endif
-
-void
-_jit_putargr(jit_state_t *_jit, int32_t u, jit_node_t *v)
-{
-    assert(v->code == jit_code_arg);
-    jit_inc_synth_wp(putargr, u, v);
-    if (jit_arg_reg_p(v->u.w))
-       jit_movr(_I0 + v->u.w, u);
-    else
-       jit_stxi(v->u.w, JIT_FP, u);
-    jit_dec_synth();
-}
-
-void
-_jit_putargi(jit_state_t *_jit, jit_word_t u, jit_node_t *v)
-{
-    int32_t            regno;
-    assert(v->code == jit_code_arg);
-    jit_inc_synth_wp(putargi, u, v);
-    if (jit_arg_reg_p(v->u.w))
-       jit_movi(_I0 + v->u.w, u);
-    else {
-       regno = jit_get_reg(jit_class_gpr);
-       jit_movi(regno, u);
-       jit_stxi(v->u.w, JIT_FP, regno);
-       jit_unget_reg(regno);
-    }
-    jit_dec_synth();
-}
-
-void
-_jit_getarg_f(jit_state_t *_jit, int32_t u, jit_node_t *v)
-{
-    assert(v->code == jit_code_arg_f);
-    assert(_jitc->function);
-    jit_inc_synth_wp(getarg_f, u, v);
-#  if __WORDSIZE == 32
-    if (jit_arg_reg_p(v->u.w)) {
-       jit_stxi_i(-4, JIT_FP, _I0 + v->u.w);
-       jit_ldxi_f(u, JIT_FP, -4);
-    }
-#  else
-    if (jit_arg_d_reg_p(v->u.w)) {
-       jit_live(_F0 - (v->u.w << 1));  /* pair of registers is live */
-       jit_movr_f(u, (_F0 - (v->u.w << 1)) - 1);
-    }
-#  endif
-    else
-       jit_ldxi_f(u, JIT_FP, v->u.w + (__WORDSIZE >> 3) -
-                  sizeof(jit_float32_t));
-    jit_dec_synth();
-}
-
-void
-_jit_putargr_f(jit_state_t *_jit, int32_t u, jit_node_t *v)
-{
-    assert(v->code == jit_code_arg_f);
-    jit_inc_synth_wp(putargr_f, u, v);
-#  if __WORDSIZE == 32
-    if (jit_arg_reg_p(v->u.w)) {
-       jit_stxi_f(-4, JIT_FP, u);
-       jit_ldxi_i(_I0 + v->u.w, JIT_FP, -4);
-    }
-#  else
-    if (jit_arg_d_reg_p(v->u.w)) {
-       jit_live(_F0 - (v->u.w << 1));  /* pair of registers is live */
-       jit_movr_f((_F0 - (v->u.w << 1)) - 1, u);
-    }
-#  endif
-    else
-       jit_stxi_f(v->u.w + (__WORDSIZE >> 3) -
-                  sizeof(jit_float32_t), JIT_FP, u);
-    jit_dec_synth();
-}
-
-void
-_jit_putargi_f(jit_state_t *_jit, jit_float32_t u, jit_node_t *v)
-{
-    int32_t            regno;
-    assert(v->code == jit_code_arg_f);
-    jit_inc_synth_fp(putargi_f, u, v);
-#  if __WORDSIZE == 32
-    regno = jit_get_reg(jit_class_fpr);
-    jit_movi_f(regno, u);
-    if (jit_arg_reg_p(v->u.w)) {
-       jit_stxi_f(-4, JIT_FP, regno);
-       jit_ldxi_i(_I0 + v->u.w, JIT_FP, -4);
-    }
-    else
-       jit_stxi_f(v->u.w, JIT_FP, regno);
-    jit_unget_reg(regno);
-#  else
-    if (jit_arg_d_reg_p(v->u.w)) {
-       jit_live(_F0 - (v->u.w << 1));  /* pair of registers is live */
-       jit_movi_f((_F0 - (v->u.w << 1)) - 1, u);
-    }
-    else {
-       regno = jit_get_reg(jit_class_fpr | jit_class_sng);
-       jit_movi_f(regno, u);
-       jit_stxi_f(v->u.w + (__WORDSIZE >> 3) -
-                  sizeof(jit_float32_t), JIT_FP, regno);
-       jit_unget_reg(regno);
-    }
-#  endif
-    jit_dec_synth();
-}
-
-void
-_jit_getarg_d(jit_state_t *_jit, int32_t u, jit_node_t *v)
-{
-    assert(v->code == jit_code_arg_d);
-    assert(_jitc->function);
-    jit_inc_synth_wp(getarg_d, u, v);
-    if (jit_arg_d_reg_p(v->u.w)) {
-#  if __WORDSIZE == 32
-       jit_stxi(-8, JIT_FP, _I0 + v->u.w);
-       jit_stxi(-4, JIT_FP, _I0 + v->u.w + 1);
-       jit_ldxi_d(u, JIT_FP, -8);
-#  else
-       jit_movr_d(u, _F0 - (v->u.w << 1));
-#  endif
-    }
-#  if __WORDSIZE == 32
-    else if (jit_arg_reg_p(v->u.w)) {
-       jit_stxi(-8, JIT_FP, _I0 + v->u.w);
-       jit_ldxi_f(u, JIT_FP, -8);
-       jit_ldxi_f(u + 1, JIT_FP, stack_framesize);
-    }
-#  endif
-    else {
-#  if __WORDSIZE == 32
-       jit_ldxi_f(u, JIT_FP, v->u.w);
-       jit_ldxi_f(u + 1, JIT_FP, v->u.w + 4);
-#  else
-       jit_ldxi_d(u, JIT_FP, v->u.w);
-#  endif
-    }
-    jit_dec_synth();
-}
-
-void
-_jit_putargr_d(jit_state_t *_jit, int32_t u, jit_node_t *v)
-{
-   int32_t             regno;
-    assert(v->code == jit_code_arg_d);
-    jit_inc_synth_wp(putargr_d, u, v);
-#  if __WORDSIZE == 32
-    if (jit_arg_d_reg_p(v->u.w)) {
-       jit_stxi_d(-8, JIT_FP, u);
-       jit_ldxi(_I0 + v->u.w, JIT_FP, -8);
-       jit_ldxi(_I0 + v->u.w + 1, JIT_FP, -4);
-    }
-    else if (jit_arg_reg_p(v->u.w)) {
-       regno = jit_get_reg(jit_class_gpr);
-       jit_stxi_d(-8, JIT_FP, u);
-       jit_ldxi(_I0 + v->u.w, JIT_FP, -8);
-       jit_ldxi(regno, JIT_FP, -4);
-       jit_stxi(stack_framesize, JIT_FP, regno);
-       jit_unget_reg(regno);
-    }
-    else if ((v->u.w & 7) == 0)
-       jit_stxi_d(v->u.w, JIT_FP, u);
-    else {
-       jit_stxi_d(-8, JIT_FP, u);
-       regno = jit_get_reg(jit_class_gpr);
-       jit_ldxi(regno, JIT_FP, -8);
-       jit_stxi(v->u.w, JIT_FP, regno);
-       jit_ldxi(regno, JIT_FP, -4);
-       jit_stxi(v->u.w + 4, JIT_FP, regno);
-       jit_unget_reg(regno);
-    }
-#  else
-    if (jit_arg_d_reg_p(v->u.w))
-       jit_movr_d(_F0 - (v->u.w << 1), u);
-    else
-       jit_stxi_d(v->u.w, JIT_FP, u);
-#  endif
-    jit_dec_synth();
-}
-
-void
-_jit_putargi_d(jit_state_t *_jit, jit_float64_t u, jit_node_t *v)
-{
-#  if __WORDSIZE == 32
-    int32_t            gpr;
-#  endif
-   int32_t             regno;
-    assert(v->code == jit_code_arg_d);
-    jit_inc_synth_dp(putargi_d, u, v);
-#  if __WORDSIZE == 32
-    regno = jit_get_reg(jit_class_fpr);
-    jit_movi_d(regno, u);
-    if (jit_arg_d_reg_p(v->u.w)) {
-       jit_stxi_d(-8, JIT_FP, regno);
-       jit_ldxi(_I0 + v->u.w, JIT_FP, -8);
-       jit_ldxi(_I0 + v->u.w + 1, JIT_FP, -4);
-    }
-    else if (jit_arg_reg_p(v->u.w)) {
-       gpr = jit_get_reg(jit_class_gpr);
-       jit_stxi_d(-8, JIT_FP, regno);
-       jit_ldxi(_I0 + v->u.w, JIT_FP, -8);
-       jit_ldxi(gpr, JIT_FP, -4);
-       jit_stxi(stack_framesize, JIT_FP, gpr);
-       jit_unget_reg(gpr);
-    }
-    else if ((v->u.w & 7) == 0)
-       jit_stxi_d(v->u.w, JIT_FP, regno);
-    else {
-       jit_stxi_d(-8, JIT_FP, regno);
-       gpr = jit_get_reg(jit_class_gpr);
-       jit_ldxi(gpr, JIT_FP, -8);
-       jit_stxi(v->u.w, JIT_FP, gpr);
-       jit_ldxi(gpr, JIT_FP, -4);
-       jit_stxi(v->u.w + 4, JIT_FP, gpr);
-       jit_unget_reg(gpr);
-    }
-    jit_unget_reg(regno);
-#  else
-    if (jit_arg_d_reg_p(v->u.w))
-       jit_movi_d(_F0 - (v->u.w << 1), u);
-    else {
-       regno = jit_get_reg(jit_class_fpr | jit_class_dbl);
-       jit_movi_d(regno, u);
-       jit_stxi_d(v->u.w, JIT_FP, regno);
-       jit_unget_reg(regno);
-    }
-#  endif
-    jit_dec_synth();
-}
-
-void
-_jit_pushargr(jit_state_t *_jit, int32_t u)
-{
-    jit_inc_synth_w(pushargr, u);
-    jit_link_prepare();
-    if (jit_arg_reg_p(_jitc->function->call.argi)) {
-       jit_movr(_O0 + _jitc->function->call.argi, u);
-       ++_jitc->function->call.argi;
-    }
-    else {
-#  if __WORDSIZE == 64
-       if (jit_arg_d_reg_p(_jitc->function->call.argi))
-           ++_jitc->function->call.argi;
-#  endif
-       jit_stxi(BIAS(_jitc->function->call.size + stack_framesize),
-                JIT_SP, u);
-       _jitc->function->call.size += sizeof(jit_word_t);
-    }
-    jit_dec_synth();
-}
-
-void
-_jit_pushargi(jit_state_t *_jit, jit_word_t u)
-{
-    int32_t            regno;
-    jit_inc_synth_w(pushargi, u);
-    jit_link_prepare();
-    if (jit_arg_reg_p(_jitc->function->call.argi)) {
-       jit_movi(_O0 + _jitc->function->call.argi, u);
-       ++_jitc->function->call.argi;
-    }
-    else {
-#  if __WORDSIZE == 64
-       if (jit_arg_d_reg_p(_jitc->function->call.argi))
-           ++_jitc->function->call.argi;
-#  endif
-       regno = jit_get_reg(jit_class_gpr);
-       jit_movi(regno, u);
-       jit_stxi(BIAS(_jitc->function->call.size + stack_framesize),
-                JIT_SP, regno);
-       jit_unget_reg(regno);
-       _jitc->function->call.size += sizeof(jit_word_t);
-    }
-    jit_dec_synth();
-}
-
-void
-_jit_pushargr_f(jit_state_t *_jit, int32_t u)
-{
-    jit_inc_synth_w(pushargr_f, u);
-    jit_link_prepare();
-#  if __WORDSIZE == 32
-    if (jit_arg_reg_p(_jitc->function->call.argi)) {
-       jit_stxi_f(-8, JIT_FP, u);
-       jit_ldxi(_O0 + _jitc->function->call.argi, JIT_FP, -8);
-       ++_jitc->function->call.argi;
-    }
-    else {
-       jit_stxi_f(_jitc->function->call.size + stack_framesize,
-                  JIT_SP, u);
-       _jitc->function->call.size += sizeof(jit_float32_t);
-    }
-#  else
-    if ((_jitc->function->call.call & jit_call_varargs) &&
-       jit_arg_reg_p(_jitc->function->call.argi)) {
-       jit_stxi_f(BIAS(-8), JIT_FP, u);
-       jit_ldxi_i(_O0 + _jitc->function->call.argi, JIT_FP, BIAS(-8));
-       ++_jitc->function->call.argi;
-    }
-    else if (!(_jitc->function->call.call & jit_call_varargs) &&
-            jit_arg_d_reg_p(_jitc->function->call.argi)) {
-       /* pair of registers is live */
-       jit_live(_F0 - (_jitc->function->call.argi << 1));
-       jit_movr_f((_F0 - (_jitc->function->call.argi << 1)) - 1, u);
-       if (!jit_arg_reg_p(_jitc->function->call.argi))
-           _jitc->function->call.size += sizeof(jit_float64_t);
-       ++_jitc->function->call.argi;
-    }
-    else {
-       jit_stxi_f(BIAS(_jitc->function->call.size + stack_framesize + 4),
-                  JIT_SP, u);
-       _jitc->function->call.size += sizeof(jit_float64_t);
-    }
-#  endif
-    jit_dec_synth();
-}
-
-void
-_jit_pushargi_f(jit_state_t *_jit, jit_float32_t u)
-{
-    int32_t            regno;
-    jit_inc_synth_f(pushargi_f, u);
-    jit_link_prepare();
-#  if __WORDSIZE == 32
-    regno = jit_get_reg(jit_class_fpr);
-    jit_movi_f(regno, u);
-    if (jit_arg_reg_p(_jitc->function->call.argi)) {
-       jit_stxi_f(-8, JIT_FP, regno);
-       jit_ldxi(_O0 + _jitc->function->call.argi, JIT_FP, -8);
-       _jitc->function->call.argi++;
-    }
-    else {
-       jit_stxi_f(_jitc->function->call.size + stack_framesize,
-                  JIT_SP, regno);
-       _jitc->function->call.size += sizeof(jit_float32_t);
-    }
-    jit_unget_reg(regno);
-#  else
-    if ((_jitc->function->call.call & jit_call_varargs) &&
-       jit_arg_reg_p(_jitc->function->call.argi)) {
-       regno = jit_get_reg(jit_class_fpr | jit_class_sng);
-       jit_movi_f(regno, u);
-       jit_stxi_f(BIAS(-8), JIT_FP, regno);
-       jit_ldxi_i(_O0 + _jitc->function->call.argi, JIT_FP, BIAS(-8));
-       ++_jitc->function->call.argi;
-       jit_unget_reg(regno);
-    }
-    else if (!(_jitc->function->call.call & jit_call_varargs) &&
-            jit_arg_d_reg_p(_jitc->function->call.argi)) {
-       /* pair of registers is live */
-       jit_live(_F0 - (_jitc->function->call.argi << 1));
-       jit_movi_f((_F0 - (_jitc->function->call.argi << 1)) - 1, u);
-       if (!jit_arg_reg_p(_jitc->function->call.argi))
-           _jitc->function->call.size += sizeof(jit_float64_t);
-       ++_jitc->function->call.argi;
-    }
-    else {
-       regno = jit_get_reg(jit_class_fpr | jit_class_sng);
-       jit_movi_f(regno, u);
-       jit_stxi_f(BIAS(_jitc->function->call.size + stack_framesize + 4),
-                  JIT_SP, regno);
-       jit_unget_reg(regno);
-       _jitc->function->call.size += sizeof(jit_float64_t);
-    }
-#  endif
-    jit_dec_synth();
-}
-
-void
-_jit_pushargr_d(jit_state_t *_jit, int32_t u)
-{
-    jit_inc_synth_w(pushargr_d, u);
-    jit_link_prepare();
-#  if __WORDSIZE == 32
-    if (jit_arg_d_reg_p(_jitc->function->call.argi)) {
-       jit_stxi_d(BIAS(-8), JIT_FP, u);
-       jit_ldxi(_O0 + _jitc->function->call.argi, JIT_FP, BIAS(-8));
-       jit_ldxi(_O0 + _jitc->function->call.argi + 1, JIT_FP, -4);
-       _jitc->function->call.argi += 2;
-    }
-    else if (jit_arg_reg_p(_jitc->function->call.argi)) {
-       jit_stxi_f(-8, JIT_FP, u);
-       jit_ldxi(_O0 + _jitc->function->call.argi, JIT_FP, -8);
-       ++_jitc->function->call.argi;
-       jit_stxi_f(stack_framesize, JIT_SP, u + 1);
-       _jitc->function->call.size += sizeof(jit_float32_t);
-    }
-    else {
-       jit_stxi_f(_jitc->function->call.size + stack_framesize,
-                  JIT_SP, u);
-       jit_stxi_f(_jitc->function->call.size + stack_framesize + 4,
-                  JIT_SP, u + 1);
-       _jitc->function->call.size += sizeof(jit_float64_t);
-    }
-#  else
-    if ((_jitc->function->call.call & jit_call_varargs) &&
-       jit_arg_reg_p(_jitc->function->call.argi)) {
-       jit_stxi_d(BIAS(-8), JIT_FP, u);
-       jit_ldxi(_O0 + _jitc->function->call.argi, JIT_FP, BIAS(-8));
-       ++_jitc->function->call.argi;
-    }
-    else if (!(_jitc->function->call.call & jit_call_varargs) &&
-            jit_arg_d_reg_p(_jitc->function->call.argi)) {
-       jit_movr_d(_F0 - (_jitc->function->call.argi << 1), u);
-       if (!jit_arg_reg_p(_jitc->function->call.argi))
-           _jitc->function->call.size += sizeof(jit_float64_t);
-       ++_jitc->function->call.argi;
-    }
-    else {
-       jit_stxi_d(BIAS(_jitc->function->call.size + stack_framesize),
-                  JIT_SP, u);
-       _jitc->function->call.size += sizeof(jit_float64_t);
-    }
-#  endif
-    jit_dec_synth();
-}
-
-void
-_jit_pushargi_d(jit_state_t *_jit, jit_float64_t u)
-{
-    int32_t            regno;
-    jit_inc_synth_d(pushargi_d, u);
-    jit_link_prepare();
-#  if __WORDSIZE == 32
-    regno = jit_get_reg(jit_class_fpr);
-    jit_movi_d(regno, u);
-    if (jit_arg_d_reg_p(_jitc->function->call.argi)) {
-       jit_stxi_d(BIAS(-8), JIT_FP, regno);
-       jit_ldxi(_O0 + _jitc->function->call.argi, JIT_FP, BIAS(-8));
-       jit_ldxi(_O0 + _jitc->function->call.argi + 1, JIT_FP, -4);
-       _jitc->function->call.argi += 2;
-    }
-    else if (jit_arg_reg_p(_jitc->function->call.argi)) {
-       jit_stxi_f(-8, JIT_FP, regno);
-       jit_ldxi(_O0 + _jitc->function->call.argi, JIT_FP, -8);
-       ++_jitc->function->call.argi;
-       jit_stxi_f(stack_framesize, JIT_SP, u + 1);
-       _jitc->function->call.size += sizeof(jit_float32_t);
-    }
-    else {
-       jit_stxi_f(_jitc->function->call.size + stack_framesize,
-                  JIT_SP, regno);
-       jit_stxi_f(_jitc->function->call.size + stack_framesize + 4,
-                  JIT_SP, regno + 1);
-       _jitc->function->call.size += sizeof(jit_float64_t);
-    }
-    jit_unget_reg(regno);
-#  else
-    if ((_jitc->function->call.call & jit_call_varargs) &&
-       jit_arg_reg_p(_jitc->function->call.argi)) {
-       regno = jit_get_reg(jit_class_fpr | jit_class_dbl);
-       jit_movi_d(regno, u);
-       jit_stxi_d(BIAS(-8), JIT_FP, regno);
-       jit_ldxi(_O0 + _jitc->function->call.argi, JIT_FP, BIAS(-8));
-       ++_jitc->function->call.argi;
-       jit_unget_reg(regno);
-    }
-    else if (!(_jitc->function->call.call & jit_call_varargs) &&
-            jit_arg_d_reg_p(_jitc->function->call.argi)) {
-       jit_movi_d(_F0 - (_jitc->function->call.argi << 1), u);
-       if (!jit_arg_reg_p(_jitc->function->call.argi))
-           _jitc->function->call.size += sizeof(jit_float64_t);
-       ++_jitc->function->call.argi;
-    }
-    else {
-       regno = jit_get_reg(jit_class_fpr | jit_class_dbl);
-       jit_movi_d(regno, u);
-       jit_stxi_d(BIAS(_jitc->function->call.size + stack_framesize),
-                  JIT_SP, regno);
-       jit_unget_reg(regno);
-       _jitc->function->call.size += sizeof(jit_float64_t);
-    }
-#  endif
-    jit_dec_synth();
-}
-
-jit_bool_t
-_jit_regarg_p(jit_state_t *_jit, jit_node_t *node, int32_t regno)
-{
-    int32_t            spec;
-
-    spec = jit_class(_rvs[regno].spec);
-    if ((spec & (jit_class_arg|jit_class_gpr)) ==
-       (jit_class_arg|jit_class_gpr)) {
-       regno -= _O0;
-       if (regno >= 0 && regno < node->v.w)
-           return (1);
-    }
-#  if __WORDSIZE == 64
-    if ((spec & (jit_class_arg|jit_class_fpr)) ==
-       (jit_class_arg|jit_class_fpr)) {
-       regno = _F0 - (regno >> 1);
-       if (regno >= 0 && regno < node->v.w)
-           return (1);
-    }
-#  endif
-
-    return (0);
-}
-
-void
-_jit_finishr(jit_state_t *_jit, int32_t r0)
-{
-    jit_node_t         *call;
-    assert(_jitc->function);
-    jit_inc_synth_w(finishr, r0);
-    if (_jitc->function->self.alen < _jitc->function->call.size)
-       _jitc->function->self.alen = _jitc->function->call.size;
-    call = jit_callr(r0);
-    call->v.w = _jitc->function->self.argi;
-    call->w.w = _jitc->function->self.argf;
-    _jitc->function->call.argi = _jitc->function->call.argf =
-       _jitc->function->call.size = 0;
-    _jitc->prepare = 0;
-    jit_dec_synth();
-}
-
-jit_node_t *
-_jit_finishi(jit_state_t *_jit, jit_pointer_t i0)
-{
-    jit_node_t         *node;
-    assert(_jitc->function);
-    jit_inc_synth_w(finishi, (jit_word_t)i0);
-    if (_jitc->function->self.alen < _jitc->function->call.size)
-       _jitc->function->self.alen = _jitc->function->call.size;
-    node = jit_calli(i0);
-    node->v.w = _jitc->function->call.argi;
-    node->w.w = _jitc->function->call.argf;
-    _jitc->function->call.argi = _jitc->function->call.argf =
-       _jitc->function->call.size = 0;
-    _jitc->prepare = 0;
-    jit_dec_synth();
-    return (node);
-}
-
-void
-_jit_retval_c(jit_state_t *_jit, int32_t r0)
-{
-    jit_inc_synth_w(retval_c, r0);
-    jit_extr_c(r0, _O0);
-    jit_dec_synth();
-}
-
-void
-_jit_retval_uc(jit_state_t *_jit, int32_t r0)
-{
-    jit_inc_synth_w(retval_uc, r0);
-    jit_extr_uc(r0, _O0);
-    jit_dec_synth();
-}
-
-void
-_jit_retval_s(jit_state_t *_jit, int32_t r0)
-{
-    jit_inc_synth_w(retval_s, r0);
-    jit_extr_s(r0, _O0);
-    jit_dec_synth();
-}
-
-void
-_jit_retval_us(jit_state_t *_jit, int32_t r0)
-{
-    jit_inc_synth_w(retval_us, r0);
-    jit_extr_us(r0, _O0);
-    jit_dec_synth();
-}
-
-void
-_jit_retval_i(jit_state_t *_jit, int32_t r0)
-{
-    jit_inc_synth_w(retval_i, r0);
-#  if __WORDSIZE == 32
-    if (r0 != _O0)
-       jit_movr(r0, _O0);
-#  else
-    jit_extr_i(r0, _O0);
-#  endif
-    jit_dec_synth();
-}
-
-#  if __WORDSIZE == 64
-void
-_jit_retval_ui(jit_state_t *_jit, int32_t r0)
-{
-    jit_inc_synth_w(retval_i, r0);
-    if (r0 != _O0)
-       jit_extr_ui(r0, _O0);
-    jit_dec_synth();
-}
-
-void
-_jit_retval_l(jit_state_t *_jit, int32_t r0)
-{
-    jit_inc_synth_w(retval_i, r0);
-    if (r0 != _O0)
-       jit_movr(r0, _O0);
-    jit_dec_synth();
-}
-#  endif
-
-void
-_jit_retval_f(jit_state_t *_jit, int32_t r0)
-{
-    jit_inc_synth_w(retval_f, r0);
-    if (r0 != JIT_FRET)
-       jit_movr_f(r0, JIT_FRET);
-    jit_dec_synth();
-}
-
-void
-_jit_retval_d(jit_state_t *_jit, int32_t r0)
-{
-    jit_inc_synth_w(retval_d, r0);
-    if (r0 != JIT_FRET)
-       jit_movr_d(r0, JIT_FRET);
-    jit_dec_synth();
-}
-
-jit_pointer_t
-_emit_code(jit_state_t *_jit)
-{
-    jit_node_t         *node;
-    jit_node_t         *temp;
-    jit_word_t          word;
-    int32_t             value;
-    int32_t             offset;
-    struct {
-       jit_node_t      *node;
-       jit_word_t       word;
-#if DEVEL_DISASSEMBLER
-       jit_word_t       prevw;
-#endif
-       int32_t  patch_offset;
-    } undo;
-#if DEVEL_DISASSEMBLER
-    jit_word_t          prevw;
-#endif
-
-    _jitc->function = NULL;
-
-    jit_reglive_setup();
-
-    undo.word = 0;
-    undo.node = NULL;
-    undo.patch_offset = 0;
-
-#define case_rr(name, type)                                            \
-           case jit_code_##name##r##type:                              \
-               name##r##type(rn(node->u.w), rn(node->v.w));            \
-               break
-#define case_rw(name, type)                                            \
-           case jit_code_##name##i##type:                              \
-               name##i##type(rn(node->u.w), node->v.w);                \
-               break
-#define case_wr(name, type)                                            \
-           case jit_code_##name##i##type:                              \
-               name##i##type(node->u.w, rn(node->v.w));                \
-               break
-#define case_rf(name)                                                  \
-           case jit_code_##name##i##type:                              \
-               assert(node->flag & jit_flag_data);                     \
-               name##_f(rn(node->u.w),                                 \
-               (jit_float32_t *)node->v.n->u.w);                       \
-               break
-#define case_rd(name)                                                  \
-           case jit_code_##name##i_d:                                  \
-               assert(node->flag & jit_flag_data);                     \
-               name##_d(rn(node->u.w),                                 \
-                        (jit_float64_t *)node->v.n->u.w);              \
-               break
-#define case_rrr(name, type)                                           \
-           case jit_code_##name##r##type:                              \
-               name##r##type(rn(node->u.w),                            \
-                             rn(node->v.w), rn(node->w.w));            \
-               break
-#define case_rrrr(name, type)                                          \
-           case jit_code_##name##r##type:                              \
-               name##r##type(rn(node->u.q.l), rn(node->u.q.h),         \
-                             rn(node->v.w), rn(node->w.w));            \
-               break
-#define case_rrw(name, type)                                           \
-           case jit_code_##name##i##type:                              \
-               name##i##type(rn(node->u.w),                            \
-                             rn(node->v.w), node->w.w);                \
-               break
-#define case_rrrw(name, type)                                          \
-           case jit_code_##name##i##type:                              \
-               name##i##type(rn(node->u.q.l), rn(node->u.q.h),         \
-                             rn(node->v.w), node->w.w);                \
-               break
-#define case_rrf(name, type, size)                                     \
-           case jit_code_##name##i##type:                              \
-               assert(node->flag & jit_flag_data);                     \
-               name##i##type(rn(node->u.w), rn(node->v.w),             \
-                             (jit_float##size##_t *)node->w.n->u.w);   \
-               break
-#define case_wrr(name, type)                                           \
-           case jit_code_##name##i##type:                              \
-               name##i##type(node->u.w, rn(node->v.w), rn(node->w.w)); \
-               break
-#define case_brr(name, type)                                           \
-           case jit_code_##name##r##type:                              \
-               temp = node->u.n;                                       \
-               assert(temp->code == jit_code_label ||                  \
-                      temp->code == jit_code_epilog);                  \
-               if (temp->flag & jit_flag_patch)                        \
-                   name##r##type(temp->u.w, rn(node->v.w),             \
-                                 rn(node->w.w));                       \
-               else {                                                  \
-                   word = name##r##type(_jit->pc.w,                    \
-                                        rn(node->v.w), rn(node->w.w)); \
-                   patch(word, node);                                  \
-               }                                                       \
-               break
-#define case_brw(name, type)                                           \
-           case jit_code_##name##i##type:                              \
-               temp = node->u.n;                                       \
-               assert(temp->code == jit_code_label ||                  \
-                      temp->code == jit_code_epilog);                  \
-               if (temp->flag & jit_flag_patch)                        \
-                   name##i##type(temp->u.w,                            \
-                                 rn(node->v.w), node->w.w);            \
-               else {                                                  \
-                   word = name##i##type(_jit->pc.w,                    \
-                                        rn(node->v.w), node->w.w);     \
-                   patch(word, node);                                  \
-               }                                                       \
-               break
-#define case_brf(name, type, size)                                     \
-           case jit_code_##name##i##type:                              \
-               temp = node->u.n;                                       \
-               assert(temp->code == jit_code_label ||                  \
-                      temp->code == jit_code_epilog);                  \
-               if (temp->flag & jit_flag_patch)                        \
-                   name##i##type(temp->u.w, rn(node->v.w),             \
-                               (jit_float##size##_t *)node->w.n->u.w); \
-               else {                                                  \
-                   word = name##i##type(_jit->pc.w, rn(node->v.w),     \
-                               (jit_float##size##_t *)node->w.n->u.w); \
-                   patch(word, node);                                  \
-               }                                                       \
-               break
-#if DEVEL_DISASSEMBLER
-    prevw = _jit->pc.w;
-#endif
-    for (node = _jitc->head; node; node = node->next) {
-       if (_jit->pc.uc >= _jitc->code.end)
-           return (NULL);
-
-#if DEVEL_DISASSEMBLER
-       node->offset = (jit_uword_t)_jit->pc.w - (jit_uword_t)prevw;
-       prevw = _jit->pc.w;
-#endif
-       value = jit_classify(node->code);
-       jit_regarg_set(node, value);
-       switch (node->code) {
-           case jit_code_align:
-               assert(!(node->u.w & (node->u.w - 1)) &&
-                      node->u.w <= sizeof(jit_word_t));
-               if (node->u.w == sizeof(jit_word_t) &&
-                   (word = _jit->pc.w & (sizeof(jit_word_t) - 1)))
-                   nop(sizeof(jit_word_t) - word);
-               break;
-           case jit_code_note:         case jit_code_name:
-               node->u.w = _jit->pc.w;
-               break;
-           case jit_code_label:
-               if ((node->link || (node->flag & jit_flag_use)) &&
-                   (word = _jit->pc.w & (sizeof(jit_word_t) - 1)))
-                   nop(sizeof(jit_word_t) - word);
-               /* remember label is defined */
-               node->flag |= jit_flag_patch;
-               node->u.w = _jit->pc.w;
-               break;
-               case_rrr(add,);
-               case_rrw(add,);
-               case_rrr(addc,);
-               case_rrw(addc,);
-               case_rrr(addx,);
-               case_rrw(addx,);
-               case_rrr(sub,);
-               case_rrw(sub,);
-               case_rrr(subc,);
-               case_rrw(subc,);
-               case_rrr(subx,);
-               case_rrw(subx,);
-               case_rrw(rsb,);
-               case_rrr(mul,);
-               case_rrw(mul,);
-               case_rrrr(qmul,);
-               case_rrrw(qmul,);
-               case_rrrr(qmul, _u);
-               case_rrrw(qmul, _u);
-               case_rrr(div,);
-               case_rrw(div,);
-               case_rrr(div, _u);
-               case_rrw(div, _u);
-               case_rrrr(qdiv,);
-               case_rrrw(qdiv,);
-               case_rrrr(qdiv, _u);
-               case_rrrw(qdiv, _u);
-               case_rrr(rem,);
-               case_rrw(rem,);
-               case_rrr(rem, _u);
-               case_rrw(rem, _u);
-               case_rrr(and,);
-               case_rrw(and,);
-               case_rrr(or,);
-               case_rrw(or,);
-               case_rrr(xor,);
-               case_rrw(xor,);
-               case_rrr(lsh,);
-               case_rrw(lsh,);
-               case_rrr(rsh,);
-               case_rrw(rsh,);
-               case_rrr(rsh, _u);
-               case_rrw(rsh, _u);
-               case_rr(trunc, _f_i);
-               case_rr(trunc, _d_i);
-#if __WORDSIZE == 64
-               case_rr(trunc, _f_l);
-               case_rr(trunc, _d_l);
-#endif
-               case_rrr(lt,);
-               case_rrw(lt,);
-               case_rrr(lt, _u);
-               case_rrw(lt, _u);
-               case_rrr(le,);
-               case_rrw(le,);
-               case_rrr(le, _u);
-               case_rrw(le, _u);
-               case_rrr(eq,);
-               case_rrw(eq,);
-               case_rrr(ge,);
-               case_rrw(ge,);
-               case_rrr(ge, _u);
-               case_rrw(ge, _u);
-               case_rrr(gt,);
-               case_rrw(gt,);
-               case_rrr(gt, _u);
-               case_rrw(gt, _u);
-               case_rrr(ne,);
-               case_rrw(ne,);
-               case_rr(ld, _c);
-               case_rw(ld, _c);
-               case_rr(ld, _uc);
-               case_rw(ld, _uc);
-               case_rr(ld, _s);
-               case_rw(ld, _s);
-               case_rr(ld, _us);
-               case_rw(ld, _us);
-               case_rr(ld, _i);
-               case_rw(ld, _i);
-#if __WORDSIZE == 64
-               case_rr(ld, _ui);
-               case_rw(ld, _ui);
-               case_rr(ld, _l);
-               case_rw(ld, _l);
-#endif
-               case_rrr(ldx, _c);
-               case_rrw(ldx, _c);
-               case_rrr(ldx, _uc);
-               case_rrw(ldx, _uc);
-               case_rrr(ldx, _s);
-               case_rrw(ldx, _s);
-               case_rrr(ldx, _us);
-               case_rrw(ldx, _us);
-               case_rrr(ldx, _i);
-               case_rrw(ldx, _i);
-#if __WORDSIZE == 64
-               case_rrr(ldx, _ui);
-               case_rrw(ldx, _ui);
-               case_rrr(ldx, _l);
-               case_rrw(ldx, _l);
-#endif
-               case_rr(st, _c);
-               case_wr(st, _c);
-               case_rr(st, _s);
-               case_wr(st, _s);
-               case_rr(st, _i);
-               case_wr(st, _i);
-#if __WORDSIZE == 64
-               case_rr(st, _l);
-               case_wr(st, _l);
-#endif
-               case_rrr(stx, _c);
-               case_wrr(stx, _c);
-               case_rrr(stx, _s);
-               case_wrr(stx, _s);
-               case_rrr(stx, _i);
-               case_wrr(stx, _i);
-#if __WORDSIZE == 64
-               case_rrr(stx, _l);
-               case_wrr(stx, _l);
-#endif
-               case_rr(hton, _us);
-               case_rr(hton, _ui);
-#if __WORDSIZE == 64
-               case_rr(hton, _ul);
-#endif
-               case_rr(ext, _c);
-               case_rr(ext, _uc);
-               case_rr(ext, _s);
-               case_rr(ext, _us);
-#if __WORDSIZE == 64
-               case_rr(ext, _i);
-               case_rr(ext, _ui);
-#endif
-               case_rr(mov,);
-           case jit_code_movi:
-               if (node->flag & jit_flag_node) {
-                   temp = node->v.n;
-                   if (temp->code == jit_code_data ||
-                       (temp->code == jit_code_label &&
-                        (temp->flag & jit_flag_patch)))
-                       movi(rn(node->u.w), temp->u.w);
-                   else {
-                       assert(temp->code == jit_code_label ||
-                              temp->code == jit_code_epilog);
-                       word = movi_p(rn(node->u.w), node->v.w);
-                       patch(word, node);
-                   }
-               }
-               else
-                   movi(rn(node->u.w), node->v.w);
-               break;
-               case_rr(neg,);
-               case_rr(com,);
-               case_brr(blt,);
-               case_brw(blt,);
-               case_brr(blt, _u);
-               case_brw(blt, _u);
-               case_brr(ble,);
-               case_brw(ble,);
-               case_brr(ble, _u);
-               case_brw(ble, _u);
-               case_brr(beq,);
-               case_brw(beq,);
-               case_brr(bge,);
-               case_brw(bge,);
-               case_brr(bge, _u);
-               case_brw(bge, _u);
-               case_brr(bgt,);
-               case_brw(bgt,);
-               case_brr(bgt, _u);
-               case_brw(bgt, _u);
-               case_brr(bne,);
-               case_brw(bne,);
-               case_brr(boadd,);
-               case_brw(boadd,);
-               case_brr(boadd, _u);
-               case_brw(boadd, _u);
-               case_brr(bxadd,);
-               case_brw(bxadd,);
-               case_brr(bxadd, _u);
-               case_brw(bxadd, _u);
-               case_brr(bosub,);
-               case_brw(bosub,);
-               case_brr(bosub, _u);
-               case_brw(bosub, _u);
-               case_brr(bxsub,);
-               case_brw(bxsub,);
-               case_brr(bxsub, _u);
-               case_brw(bxsub, _u);
-               case_brr(bms,);
-               case_brw(bms,);
-               case_brr(bmc,);
-               case_brw(bmc,);
-               case_rrr(add, _f);
-               case_rrf(add, _f, 32);
-               case_rrr(sub, _f);
-               case_rrf(sub, _f, 32);
-               case_rrf(rsb, _f, 32);
-               case_rrr(mul, _f);
-               case_rrf(mul, _f, 32);
-               case_rrr(div, _f);
-               case_rrf(div, _f, 32);
-               case_rr(abs, _f);
-               case_rr(neg, _f);
-               case_rr(sqrt, _f);
-               case_rr(ext, _f);
-               case_rr(ext, _d_f);
-               case_rrr(lt, _f);
-               case_rrf(lt, _f, 32);
-               case_rrr(le, _f);
-               case_rrf(le, _f, 32);
-               case_rrr(eq, _f);
-               case_rrf(eq, _f, 32);
-               case_rrr(ge, _f);
-               case_rrf(ge, _f, 32);
-               case_rrr(gt, _f);
-               case_rrf(gt, _f, 32);
-               case_rrr(ne, _f);
-               case_rrf(ne, _f, 32);
-               case_rrr(unlt, _f);
-               case_rrf(unlt, _f, 32);
-               case_rrr(unle, _f);
-               case_rrf(unle, _f, 32);
-               case_rrr(uneq, _f);
-               case_rrf(uneq, _f, 32);
-               case_rrr(unge, _f);
-               case_rrf(unge, _f, 32);
-               case_rrr(ungt, _f);
-               case_rrf(ungt, _f, 32);
-               case_rrr(ltgt, _f);
-               case_rrf(ltgt, _f, 32);
-               case_rrr(ord, _f);
-               case_rrf(ord, _f, 32);
-               case_rrr(unord, _f);
-               case_rrf(unord, _f, 32);
-               case_rr(ld, _f);
-               case_rw(ld, _f);
-               case_rrr(ldx, _f);
-               case_rrw(ldx, _f);
-               case_rr(st, _f);
-               case_wr(st, _f);
-               case_rrr(stx, _f);
-               case_wrr(stx, _f);
-               case_rr(mov, _f);
-           case jit_code_movi_f:
-               assert(node->flag & jit_flag_data);
-               movi_f(rn(node->u.w), (jit_float32_t *)node->v.n->u.w);
-               break;
-               case_brr(blt, _f);
-               case_brf(blt, _f, 32);
-               case_brr(ble, _f);
-               case_brf(ble, _f, 32);
-               case_brr(beq, _f);
-               case_brf(beq, _f, 32);
-               case_brr(bge, _f);
-               case_brf(bge, _f, 32);
-               case_brr(bgt, _f);
-               case_brf(bgt, _f, 32);
-               case_brr(bne, _f);
-               case_brf(bne, _f, 32);
-               case_brr(bunlt, _f);
-               case_brf(bunlt, _f, 32);
-               case_brr(bunle, _f);
-               case_brf(bunle, _f, 32);
-               case_brr(buneq, _f);
-               case_brf(buneq, _f, 32);
-               case_brr(bunge, _f);
-               case_brf(bunge, _f, 32);
-               case_brr(bungt, _f);
-               case_brf(bungt, _f, 32);
-               case_brr(bltgt, _f);
-               case_brf(bltgt, _f, 32);
-               case_brr(bord, _f);
-               case_brf(bord, _f, 32);
-               case_brr(bunord, _f);
-               case_brf(bunord, _f, 32);
-               case_rrr(add, _d);
-               case_rrf(add, _d, 64);
-               case_rrr(sub, _d);
-               case_rrf(sub, _d, 64);
-               case_rrf(rsb, _d, 64);
-               case_rrr(mul, _d);
-               case_rrf(mul, _d, 64);
-               case_rrr(div, _d);
-               case_rrf(div, _d, 64);
-               case_rr(abs, _d);
-               case_rr(neg, _d);
-               case_rr(sqrt, _d);
-               case_rr(ext, _d);
-               case_rr(ext, _f_d);
-               case_rrr(lt, _d);
-               case_rrf(lt, _d, 64);
-               case_rrr(le, _d);
-               case_rrf(le, _d, 64);
-               case_rrr(eq, _d);
-               case_rrf(eq, _d, 64);
-               case_rrr(ge, _d);
-               case_rrf(ge, _d, 64);
-               case_rrr(gt, _d);
-               case_rrf(gt, _d, 64);
-               case_rrr(ne, _d);
-               case_rrf(ne, _d, 64);
-               case_rrr(unlt, _d);
-               case_rrf(unlt, _d, 64);
-               case_rrr(unle, _d);
-               case_rrf(unle, _d, 64);
-               case_rrr(uneq, _d);
-               case_rrf(uneq, _d, 64);
-               case_rrr(unge, _d);
-               case_rrf(unge, _d, 64);
-               case_rrr(ungt, _d);
-               case_rrf(ungt, _d, 64);
-               case_rrr(ltgt, _d);
-               case_rrf(ltgt, _d, 64);
-               case_rrr(ord, _d);
-               case_rrf(ord, _d, 64);
-               case_rrr(unord, _d);
-               case_rrf(unord, _d, 64);
-               case_rr(ld, _d);
-               case_rw(ld, _d);
-               case_rrr(ldx, _d);
-               case_rrw(ldx, _d);
-               case_rr(st, _d);
-               case_wr(st, _d);
-               case_rrr(stx, _d);
-               case_wrr(stx, _d);
-               case_rr(mov, _d);
-           case jit_code_movi_d:
-               assert(node->flag & jit_flag_data);
-               movi_d(rn(node->u.w), (jit_float64_t *)node->v.n->u.w);
-               break;
-               case_brr(blt, _d);
-               case_brf(blt, _d, 64);
-               case_brr(ble, _d);
-               case_brf(ble, _d, 64);
-               case_brr(beq, _d);
-               case_brf(beq, _d, 64);
-               case_brr(bge, _d);
-               case_brf(bge, _d, 64);
-               case_brr(bgt, _d);
-               case_brf(bgt, _d, 64);
-               case_brr(bne, _d);
-               case_brf(bne, _d, 64);
-               case_brr(bunlt, _d);
-               case_brf(bunlt, _d, 64);
-               case_brr(bunle, _d);
-               case_brf(bunle, _d, 64);
-               case_brr(buneq, _d);
-               case_brf(buneq, _d, 64);
-               case_brr(bunge, _d);
-               case_brf(bunge, _d, 64);
-               case_brr(bungt, _d);
-               case_brf(bungt, _d, 64);
-               case_brr(bltgt, _d);
-               case_brf(bltgt, _d, 64);
-               case_brr(bord, _d);
-               case_brf(bord, _d, 64);
-               case_brr(bunord, _d);
-               case_brf(bunord, _d, 64);
-           case jit_code_jmpr:
-               jmpr(rn(node->u.w));
-               break;
-           case jit_code_jmpi:
-               if (node->flag & jit_flag_node) {
-                   temp = node->u.n;
-                   assert(temp->code == jit_code_label ||
-                          temp->code == jit_code_epilog);
-                   if (temp->flag & jit_flag_patch)
-                       jmpi(temp->u.w);
-                   else {
-                       word = jmpi_p(_jit->pc.w);
-                       patch(word, node);
-                   }
-               }
-               else
-                   jmpi(node->u.w);
-               break;
-           case jit_code_callr:
-               callr(rn(node->u.w));
-               break;
-           case jit_code_calli:
-               if (node->flag & jit_flag_node) {
-                   temp = node->u.n;
-                   assert(temp->code == jit_code_label ||
-                          temp->code == jit_code_epilog);
-                   word = calli_p(temp->u.w);
-                   if (!(temp->flag & jit_flag_patch))
-                       patch(word, node);
-               }
-               else
-                   calli(node->u.w);
-               break;
-           case jit_code_prolog:
-               _jitc->function = _jitc->functions.ptr + node->w.w;
-               undo.node = node;
-               undo.word = _jit->pc.w;
-#if DEVEL_DISASSEMBLER
-               undo.prevw = prevw;
-#endif
-               undo.patch_offset = _jitc->patches.offset;
-           restart_function:
-               _jitc->again = 0;
-               prolog(node);
-               break;
-           case jit_code_epilog:
-               assert(_jitc->function == _jitc->functions.ptr + node->w.w);
-               if (_jitc->again) {
-                   for (temp = undo.node->next;
-                        temp != node; temp = temp->next) {
-                       if (temp->code == jit_code_label ||
-                           temp->code == jit_code_epilog)
-                           temp->flag &= ~jit_flag_patch;
-                   }
-                   temp->flag &= ~jit_flag_patch;
-                   node = undo.node;
-                   _jit->pc.w = undo.word;
-#if DEVEL_DISASSEMBLER
-                   prevw = undo.prevw;
-#endif
-                   _jitc->patches.offset = undo.patch_offset;
-                   goto restart_function;
-               }
-               /* remember label is defined */
-               node->flag |= jit_flag_patch;
-               node->u.w = _jit->pc.w;
-               epilog(node);
-               _jitc->function = NULL;
-               break;
-           case jit_code_va_start:
-               vastart(rn(node->u.w));
-               break;
-           case jit_code_va_arg:
-               vaarg(rn(node->u.w), rn(node->v.w));
-               break;
-           case jit_code_va_arg_d:
-               vaarg_d(rn(node->u.w), rn(node->v.w));
-               break;
-           case jit_code_live:                 case jit_code_ellipsis:
-           case jit_code_va_push:
-           case jit_code_allocai:              case jit_code_allocar:
-           case jit_code_arg:
-           case jit_code_arg_f:                case jit_code_arg_d:
-           case jit_code_va_end:
-           case jit_code_ret:
-           case jit_code_retr:                 case jit_code_reti:
-           case jit_code_retr_f:               case jit_code_reti_f:
-           case jit_code_retr_d:               case jit_code_reti_d:
-           case jit_code_getarg_c:             case jit_code_getarg_uc:
-           case jit_code_getarg_s:             case jit_code_getarg_us:
-           case jit_code_getarg_i:
-#if __WORDSIZE == 64
-           case jit_code_getarg_ui:            case jit_code_getarg_l:
-#endif
-           case jit_code_getarg_f:             case jit_code_getarg_d:
-           case jit_code_putargr:              case jit_code_putargi:
-           case jit_code_putargr_f:            case jit_code_putargi_f:
-           case jit_code_putargr_d:            case jit_code_putargi_d:
-           case jit_code_pushargr:             case jit_code_pushargi:
-           case jit_code_pushargr_f:           case jit_code_pushargi_f:
-           case jit_code_pushargr_d:           case jit_code_pushargi_d:
-           case jit_code_retval_c:             case jit_code_retval_uc:
-           case jit_code_retval_s:             case jit_code_retval_us:
-           case jit_code_retval_i:
-#if __WORDSIZE == 64
-           case jit_code_retval_ui:            case jit_code_retval_l:
-#endif
-           case jit_code_retval_f:             case jit_code_retval_d:
-           case jit_code_prepare:
-           case jit_code_finishr:              case jit_code_finishi:
-               break;
-           default:
-               abort();
-       }
-#  if __WORDSIZE == 64
-       if (jit_carry != _NOREG) {
-           switch (node->code) {
-               case jit_code_note:
-               case jit_code_addcr:            case jit_code_addci:
-               case jit_code_addxr:            case jit_code_addxi:
-               case jit_code_subcr:            case jit_code_subci:
-               case jit_code_subxr:            case jit_code_subxi:
-                   break;
-               default:
-                   jit_unget_reg(jit_carry);
-                   jit_carry = _NOREG;
-                   break;
-           }
-       }
-#  endif
-       jit_regarg_clr(node, value);
-#  if __WORDSIZE == 64
-       if (jit_carry == _NOREG)
-           assert(jit_regset_cmp_ui(&_jitc->regarg, 0) == 0);
-       else {
-           assert(jit_regset_scan1(&_jitc->regarg, 0) == jit_carry);
-           assert(jit_regset_scan1(&_jitc->regarg, jit_carry + 1) == 
ULONG_MAX);
-       }
-       assert(_jitc->synth == 0);
-#  else
-       assert(_jitc->regarg == 0 && _jitc->synth == 0);
-#  endif
-       jit_reglive(node);
-    }
-#undef case_brf
-#undef case_brw
-#undef case_brr
-#undef case_wrr
-#undef case_rrf
-#undef case_rrrw
-#undef case_rrw
-#undef case_rrrr
-#undef case_rrr
-#undef case_rf
-#undef case_wr
-#undef case_rw
-#undef case_rr
-
-    for (offset = 0; offset < _jitc->patches.offset; offset++) {
-       node = _jitc->patches.ptr[offset].node;
-       word = node->code == jit_code_movi ? node->v.n->u.w : node->u.n->u.w;
-       patch_at(_jitc->patches.ptr[offset].inst, word);
-    }
-
-    jit_flush(_jit->code.ptr, _jit->pc.uc);
-
-    return (_jit->code.ptr);
-}
-
-#define CODE                           1
-#  include "sparc-cpu.c"
-#  include ", 2018sparc-fpu.c"
-#undef CODE
-
-void
-jit_flush(void *fptr, void *tptr)
-{
-}
-
-void
-_emit_ldxi(jit_state_t *_jit, jit_gpr_t r0, jit_gpr_t r1, jit_word_t i0)
-{
-    ldxi(rn(r0), rn(r1), i0);
-}
-
-void
-_emit_stxi(jit_state_t *_jit, jit_word_t i0, jit_gpr_t r0, jit_gpr_t r1)
-{
-    stxi(i0, rn(r0), rn(r1));
-}
-
-void
-_emit_ldxi_d(jit_state_t *_jit, jit_fpr_t r0, jit_gpr_t r1, jit_word_t i0)
-{
-    ldxi_d(rn(r0), rn(r1), i0);
-}
-
-void
-_emit_stxi_d(jit_state_t *_jit, jit_word_t i0, jit_gpr_t r0, jit_fpr_t r1)
-{
-    stxi_d(i0, rn(r0), rn(r1));
-}
-
-static void
-_patch(jit_state_t *_jit, jit_word_t instr, jit_node_t *node)
-{
-    int32_t            flag;
-
-    assert(node->flag & jit_flag_node);
-    if (node->code == jit_code_movi)
-       flag = node->v.n->flag;
-    else
-       flag = node->u.n->flag;
-    assert(!(flag & jit_flag_patch));
-    if (_jitc->patches.offset >= _jitc->patches.length) {
-       jit_realloc((jit_pointer_t *)&_jitc->patches.ptr,
-                   _jitc->patches.length * sizeof(jit_patch_t),
-                   (_jitc->patches.length + 1024) * sizeof(jit_patch_t));
-       memset(_jitc->patches.ptr + _jitc->patches.length, 0,
-              1024 * sizeof(jit_patch_t));
-       _jitc->patches.length += 1024;
-    }
-    _jitc->patches.ptr[_jitc->patches.offset].inst = instr;
-    _jitc->patches.ptr[_jitc->patches.offset].node = node;
-    ++_jitc->patches.offset;
-}
diff --git a/lightening/sparc.h b/lightening/sparc.h
deleted file mode 100644
index f74f5ff..0000000
--- a/lightening/sparc.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2013-2017  Free Software Foundation, Inc.
- *
- * This file is part of GNU lightning.
- *
- * GNU lightning is free software; you can redistribute it and/or modify it
- * under the terms of the GNU Lesser General Public License as published
- * by the Free Software Foundation; either version 3, or (at your option)
- * any later version.
- *
- * GNU lightning is distributed in the hope that it will be useful, but
- * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
- * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
- * License for more details.
- *
- * Authors:
- *     Paulo Cesar Pereira de Andrade
- */
-
-#ifndef _jit_sparc_h
-#define _jit_sparc_h
-
-#define JIT_HASH_CONSTS                1
-#define JIT_NUM_OPERANDS       3
-
-/*
- * Types
- */
-#define JIT_FP                 _FP
-typedef enum {
-#define jit_r(i)               (_G2 + (i))
-#define jit_r_num()            3
-#define jit_v(i)               (_L0 + (i))
-#define jit_v_num()            8
-#if __WORDSIZE == 32
-#  define jit_f(i)             (_F0 + ((i) << 1))
-#  define jit_f_num()          8
-#else
-#  define jit_f(i)             (_F32 - (i))
-#  define jit_f_num()          16
-#endif
-#define JIT_R0                 _G2
-#define JIT_R1                 _G3
-#define JIT_R2                 _G4
-#define JIT_V0                 _L0
-#define JIT_V1                 _L1
-#define JIT_V2                 _L2
-#define JIT_V3                 _L3
-#define JIT_V4                 _L4
-#define JIT_V5                 _L5
-#define JIT_V6                 _L6
-#define JIT_V7                 _L7
-    _G0, _G1, _G2, _G3, _G4, _G5, _G6, _G7,
-    _O0, _O1, _O2, _O3, _O4, _O5, _SP, _O7,
-    _L0, _L1, _L2, _L3, _L4, _L5, _L6, _L7,
-    _I0, _I1, _I2, _I3, _I4, _I5, _FP, _I7,
-#if __WORDSIZE == 32
-#  define JIT_F0               _F0
-#  define JIT_F1               _F2
-#  define JIT_F2               _F4
-#  define JIT_F3               _F6
-#  define JIT_F4               _F8
-#  define JIT_F5               _F10
-#  define JIT_F6               _F12
-#  define JIT_F7               _F14
-    _F0, _F1,  _F2,  _F3,  _F4,  _F5,  _F6,  _F7,
-    _F8, _F9, _F10, _F11, _F12, _F13, _F14, _F15,
-#else
-    /* All single precision operations have a high cost due to being
-     * stored on registers only encodable as double precision.
-     * The cost is due to needing to move values to a register with
-     * value <= 31.
-     * This is a limitation due to using fixed named registers in
-     * lightning. */
-#  define JIT_F0               _F32
-#  define JIT_F1               _F34
-#  define JIT_F2               _F36
-#  define JIT_F3               _F38
-#  define JIT_F4               _F40
-#  define JIT_F5               _F42
-#  define JIT_F6               _F44
-#  define JIT_F7               _F46
-#  define JIT_F8               _F48
-#  define JIT_F9               _F50
-#  define JIT_F10              _F52
-#  define JIT_F11              _F54
-#  define JIT_F12              _F56
-#  define JIT_F13              _F58
-#  define JIT_F14              _F60
-#  define JIT_F15              _F62
-    _F62, _F60, _F58, _F56, _F54, _F52, _F50, _F48,
-    _F46, _F44, _F42, _F40, _F38, _F36, _F34, _F32,
-    _F31, _F30, _F29, _F28, _F27, _F26, _F25, _F24,
-    _F23, _F22, _F21, _F20, _F19, _F18, _F17, _F16,
-    _F15, _F14, _F13, _F12, _F11, _F10,  _F9,  _F8,
-     _F7,  _F6,  _F5,  _F4,  _F3,  _F2,  _F1,  _F0,
-#endif
-#define JIT_NOREG              _NOREG
-    _NOREG,
-} jit_reg_t;
-
-#endif /* _jit_sparc_h */



reply via email to

[Prev in Thread] Current Thread [Next in Thread]