-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 I've gone ahead and implemented translations for fcmpg, fcmpl, dcmpg, and dcmpl using C.cond.fmt. This gets me further in loading Kaffe (now System.checkPropertyAccess complains that "line.separator" is a zero-length key). Unfortunately, I am also getting an improper gc_free call, and thence a SIGSEGV, with jitBasic ControlFlowMethods.class.
Below is what I've added to jit3-mips.def, so people who understand the instruction set better than I do can pick it apart. I'm assuming that this instruction is specific to MIPS32, so while this doesn't matter to me, it might matter to other people. (The double versions are equivalent, but with `DOUBLE_FORMAT'.) - ---------- #define BC 0x08 #define FC 0x03 #define finsn_comp(fmt, ft, fs, cc, cond) \ LOUT = 0x00000000 | ((COP1) << 26) | \ ((fmt) << 21) | ((ft) << 16) | ((fs) << 11) | \ (((cc) & 0x07) << 8) | (FC << 4) | ((cond) & 0x1F) #define insn_bc1x(tv, offset) \ LOUT = 0x00000000 | ((COP1) << 26) | \ ((BC) << 21) | (((tv) & 0x01) << 16) | ((offset) & MASKL16BITS) #define COND_F 0x00 #define COND_UN 0x01 #define COND_EQ 0x02 #define COND_UEQ 0x03 #define COND_OLT 0x04 #define COND_ULT 0x05 #define COND_OLE 0x06 #define COND_ULE 0x07 define_insn(cmpl_float, float_cmpl_RRR) { int fs = rreg_float(2); int ft = rreg_float(1); int w = wreg_int(0); debug_name(("cmpl_float:\n")); debug((" move %s,0\n", regname(w))); debug((" C.eq.S %s,%s\n", fregname(ft), fregname(fs))); debug((" bc1t DONE\n")); debug((" C.lt.S %s,%s\n", fregname(ft), fregname(fs))); debug((" bc1t LT\n")); debug((" move %s,1", regname(w))); debug((" b DONE\n")); debug(("LT:\n")); debug((" move %s,-1", regname(w))); insn_RRR(_ADDU, w, REG_i0, REG_i0); finsn_comp(SINGLE_FORMAT, ft, fs, 0, COND_EQ); NOP(); insn_bc1x(true, 40 /* DONE */); NOP(); finsn_comp(SINGLE_FORMAT, ft, fs, 0, COND_OLT); NOP(); insn_bc1x(true, 12 /* LT */); NOP(); insn_RRC(_ADDIU, w, REG_i0, 1); insn_cbr(_BEQ, REG_i0, REG_i0, 12 /* DONE */); /* LT: */ NOP(); insn_RRC(_LUI, 0, w, 0xFFFF); insn_RRC(_ORI, w, w, 0xFFFF); /* DONE: */ } define_insn(cmpg_float, float_cmpg_RRR) { int fs = rreg_float(2); int ft = rreg_float(1); int w = wreg_int(0); debug_name(("cmpg_float:\n")); debug((" move %s,0\n", regname(w))); debug((" C.eq.S %s,%s\n", fregname(ft), fregname(fs))); debug((" bc1t DONE\n")); debug((" C.lt.S %s,%s\n", fregname(ft), fregname(fs))); debug((" bc1f GT\n")); debug((" move %s,-1", regname(w))); debug((" b DONE\n")); debug(("GT:\n")); debug((" move %s,1", regname(w))); insn_RRR(_ADDU, w, REG_i0, REG_i0); finsn_comp(SINGLE_FORMAT, ft, fs, 0, COND_EQ); NOP(); insn_bc1x(true, 40 /* DONE */); NOP(); finsn_comp(SINGLE_FORMAT, ft, fs, 0, COND_OLT); NOP(); insn_bc1x(false, 20 /* GT */); NOP(); insn_RRC(_LUI, 0, w, 0xFFFF); insn_RRC(_ORI, w, w, 0xFFFF); insn_cbr(_BEQ, REG_i0, REG_i0, 8 /* DONE */); /* GT: */ NOP(); insn_RRC(_ADDIU, w, REG_i0, 1); /* DONE: */ } - ---------- - -- Casey Marshall || [EMAIL PROTECTED] -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.2.3 (GNU/Linux) Comment: Processed by Mailcrypt 3.5.7 <http://mailcrypt.sourceforge.net/> iD8DBQFATOa/gAuWMgRGsWsRAsz0AJsECRsgK9OJUtt9osxjPu8vtl/W7QCfY2CS mVM1Ty+HISdzGHQU2hABdhY= =nFgQ -----END PGP SIGNATURE----- _______________________________________________ kaffe mailing list [EMAIL PROTECTED] http://kaffe.org/cgi-bin/mailman/listinfo/kaffe