diff --git a/src/peep.in b/src/peep.in
index ea75d00435ab697b0cebf5962f0d422809660d22..0708a1fcb9bebb540d275e2d5feea569abcc7938 100644
--- a/src/peep.in
+++ b/src/peep.in
@@ -300,6 +300,20 @@ OPER_INT(CONST_1,-1)
 
 OPER_INT(BIGNUM,0x7fffffff)
 
+// Some noops related to the above opcodes.
+// MOD_INT [$1a == 1]: POP_VALUE CONST0	// cf string % int ==> string
+LSH_INT [!$1a]:
+RSH_INT [!$1a]:
+SUBTRACT_INT [!$1a]:
+// ADD_INT [!$1a]:			// cf string + int ==> string
+AND_INT [!$1a]: POP_VALUE CONST0
+OR_INT [!$1a]:
+XOR_INT [!$1a]:
+//DIVIDE_INT [$1a == 1]:		// cf string / int ==> array(string)
+//MULTIPLY_INT [!$1a]: POP_VALUE CONST0	// cf string * int ==> string
+MULTIPLY_INT [$1a == 1]:
+MULTIPLY_INT [$1a == -1]: NEGATE
+
 // this should be automatically const optimized, right?
 // ADD_INTS ADD_INTS: ADD_INTS ($1a+$2a)
 
@@ -583,14 +597,58 @@ SIZEOF_LOCAL CONST0 BRANCH_WHEN_LE : SIZEOF_LOCAL($1a) BRANCH_WHEN_ZERO ($3a)
 CLEAR_LOCAL DEC_LOCAL_AND_POP($1a) : CONST_1 ASSIGN_LOCAL_AND_POP($1a)
 CLEAR_LOCAL INC_LOCAL_AND_POP($1a) : CONST1 ASSIGN_LOCAL_AND_POP($1a)
 
+// Popping of side-effect free values.
 NUMBER POP_VALUE :
+NEG_NUMBER POP_VALUE:
 STRING POP_VALUE :
 //FLOAT POP_VALUE :
 CONSTANT POP_VALUE :
 LOCAL POP_VALUE :
+GLOBAL POP_VALUE:
 PRIVATE_GLOBAL POP_VALUE :
 PRIVATE_TYPED_GLOBAL POP_VALUE :
+2_LOCALS POP_VALUE: LOCAL($1a)
 TRAMPOLINE POP_VALUE :
+CONST0 POP_VALUE:
+CONST1 POP_VALUE:
+CONST_1 POP_VALUE:
+BIGNUM POP_VALUE:
+MOD_INT POP_VALUE: POP_VALUE
+LSH_INT POP_VALUE: POP_VALUE
+RSH_INT POP_VALUE: POP_VALUE
+SUBTRACT_INT POP_VALUE: POP_VALUE
+ADD_INT POP_VALUE: POP_VALUE
+AND_INT POP_VALUE: POP_VALUE
+OR_INT POP_VALUE: POP_VALUE
+XOR_INT POP_VALUE: POP_VALUE
+DIVIDE_INT POP_VALUE: POP_VALUE
+MULTIPLY_INT POP_VALUE: POP_VALUE
+
+NUMBER POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
+NEG_NUMBER POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
+STRING POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
+//FLOAT POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
+CONSTANT POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
+LOCAL POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
+GLOBAL POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
+PRIVATE_GLOBAL POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
+PRIVATE_TYPED_GLOBAL POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
+2_LOCALS POP_N_ELEMS [$2a > 0]: LOCAL($1a) POP_N_ELEMS($2a-1)
+TRAMPOLINE POP_N_ELEMS [$2a > 0]: LOCAL($1a) POP_N_ELEMS($2a-1)
+CONST0 POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
+CONST1 POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
+CONST_1 POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
+BIGNUM POP_N_ELEMS [$2a > 0]: POP_N_ELEMS($2a-1)
+MOD_INT POP_N_ELEMS: POP_N_ELEMS($2a)
+LSH_INT POP_N_ELEMS: POP_N_ELEMS($2a)
+RSH_INT POP_N_ELEMS: POP_N_ELEMS($2a)
+SUBTRACT_INT POP_N_ELEMS: POP_N_ELEMS($2a)
+ADD_INT POP_N_ELEMS: POP_N_ELEMS($2a)
+AND_INT POP_N_ELEMS: POP_N_ELEMS($2a)
+OR_INT POP_N_ELEMS: POP_N_ELEMS($2a)
+XOR_INT POP_N_ELEMS: POP_N_ELEMS($2a)
+DIVIDE_INT POP_N_ELEMS: POP_N_ELEMS($2a)
+MULTIPLY_INT POP_N_ELEMS: POP_N_ELEMS($2a)
 
 RECUR RETURN [check_tailrecursion()] : TAIL_RECUR ($1a)