hello,
I've added the following new ops to i386/core.jit:
inc_i
dec_i
inc_i_ic
dec_i_ic
lt_i_ic_ic
lt_i_i_ic
gt_i_ic_ic
gt_i_i_ic
ge_i_ic_ic
ge_i_i_ic
le_i_ic_ic
le_i_i_ic
eq_i_ic_ic
eq_i_i_ic
also fixed buggy definitions for emitm_cmpl_r_m and emitm_cmpl_m_r
in i386/jit_emit.h.
cheers,
Aldo
__END__
$_=q,just perl,,s, , another ,,s,$, hacker,,print;
Index: core.jit
===================================================================
RCS file: /cvs/public/parrot/jit/i386/core.jit,v
retrieving revision 1.17
diff -c -b -r1.17 core.jit
*** core.jit 20 May 2002 05:32:59 -0000 1.17
--- core.jit 22 May 2002 10:34:48 -0000
***************
*** 74,79 ****
--- 74,163 ----
emit_jump(jit_info, *INT_CONST[1]);
}
+ Parrot_inc_i {
+ emitm_movl_m_r(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1]);
+ emitm_addl_i_r(NATIVECODE, 1, emit_EAX);
+ emitm_movl_r_m(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1])
+ }
+
+ Parrot_dec_i {
+ emitm_movl_m_r(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1]);
+ emitm_subl_i_r(NATIVECODE, 1, emit_EAX);
+ emitm_movl_r_m(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1])
+ }
+
+ Parrot_inc_i_ic {
+ emitm_movl_m_r(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1]);
+ emitm_addl_i_r(NATIVECODE, *INT_CONST[2], emit_EAX);
+ emitm_movl_r_m(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1])
+ }
+
+ Parrot_dec_i_ic {
+ emitm_movl_m_r(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1]);
+ emitm_subl_i_r(NATIVECODE, *INT_CONST[2], emit_EAX);
+ emitm_movl_r_m(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1])
+ }
+
+ Parrot_lt_i_ic_ic {
+ emitm_movl_m_r(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1]);
+ emitm_cmpl_i_r(NATIVECODE, *INT_CONST[2], emit_EAX);
+ emit_jcc(jit_info, emitm_jl, *INT_CONST[3]);
+ }
+
+ Parrot_lt_i_i_ic {
+ emitm_movl_m_r(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1]);
+ emitm_cmpl_r_m(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[2]);
+ emit_jcc(jit_info, emitm_jl, *INT_CONST[3]);
+ }
+
+ Parrot_gt_i_ic_ic {
+ emitm_movl_m_r(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1]);
+ emitm_cmpl_i_r(NATIVECODE, *INT_CONST[2], emit_EAX);
+ emit_jcc(jit_info, emitm_jg, *INT_CONST[3]);
+ }
+
+ Parrot_gt_i_i_ic {
+ emitm_movl_m_r(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1]);
+ emitm_cmpl_r_m(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[2]);
+ emit_jcc(jit_info, emitm_jg, *INT_CONST[3]);
+ }
+
+ Parrot_ge_i_ic_ic {
+ emitm_movl_m_r(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1]);
+ emitm_cmpl_i_r(NATIVECODE, *INT_CONST[2], emit_EAX);
+ emit_jcc(jit_info, emitm_jnl, *INT_CONST[3]);
+ }
+
+ Parrot_ge_i_i_ic {
+ emitm_movl_m_r(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1]);
+ emitm_cmpl_r_m(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[2]);
+ emit_jcc(jit_info, emitm_jnl, *INT_CONST[3]);
+ }
+
+ Parrot_le_i_ic_ic {
+ emitm_movl_m_r(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1]);
+ emitm_cmpl_i_r(NATIVECODE, *INT_CONST[2], emit_EAX);
+ emit_jcc(jit_info, emitm_jle, *INT_CONST[3]);
+ }
+
+ Parrot_le_i_i_ic {
+ emitm_movl_m_r(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1]);
+ emitm_cmpl_r_m(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[2]);
+ emit_jcc(jit_info, emitm_jle, *INT_CONST[3]);
+ }
+
+ Parrot_eq_i_ic_ic {
+ emitm_movl_m_r(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1]);
+ emitm_cmpl_i_r(NATIVECODE, *INT_CONST[2], emit_EAX);
+ emit_jcc(jit_info, emitm_je, *INT_CONST[3]);
+ }
+
+ Parrot_eq_i_i_ic {
+ emitm_movl_m_r(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[1]);
+ emitm_cmpl_r_m(NATIVECODE, emit_EAX, emit_None, emit_None, emit_None,
&INT_REG[2]);
+ emit_jcc(jit_info, emitm_je, *INT_CONST[3]);
+ }
+
/*
* Local variables:
* c-indentation-style: bsd
Index: jit_emit.h
===================================================================
RCS file: /cvs/public/parrot/jit/i386/jit_emit.h,v
retrieving revision 1.1
diff -c -b -r1.1 jit_emit.h
*** jit_emit.h 20 May 2002 05:32:59 -0000 1.1
--- jit_emit.h 22 May 2002 10:34:49 -0000
***************
*** 393,400 ****
/* Integer comparisions */
#define emitm_cmpl_r_r(pc, reg1, reg2) emitm_alul_r_r(pc, 0x39, reg1,
reg2)
! #define emitm_cmpl_r_m(pc, reg, b, i, s, d) emitm_alul_r_m(pc, 0x3b, reg1,
reg2, b, i, s, d)
! #define emitm_cmpl_m_r(pc, reg, b, i, s, d) emitm_alul_r_m(pc, 0x39, reg1,
reg2, b, i, s, d)
#define emitm_cmpl_i_r(pc, imm, reg) emitm_alul_i_r(pc, 0x81, emit_b111,
imm, reg)
--- 393,400 ----
/* Integer comparisions */
#define emitm_cmpl_r_r(pc, reg1, reg2) emitm_alul_r_r(pc, 0x39, reg1,
reg2)
! #define emitm_cmpl_r_m(pc, reg, b, i, s, d) emitm_alul_r_m(pc, 0x3b, reg,
b, i, s, d)
! #define emitm_cmpl_m_r(pc, reg, b, i, s, d) emitm_alul_r_m(pc, 0x39, reg,
b, i, s, d)
#define emitm_cmpl_i_r(pc, imm, reg) emitm_alul_i_r(pc, 0x81, emit_b111,
imm, reg)