Next: , Previous: CCL Statements, Up: CCL


67.7.3 CCL Expressions

CCL, unlike Lisp, uses infix expressions. The simplest CCL expressions consist of a single operand, either a register (one of r0, ..., r0) or an integer. Complex expressions are lists of the form ( expression operator operand ). Unlike C, assignments are not expressions.

In the following table, X is the target resister for a set. In subexpressions, this is implicitly r7. This means that >8, //, de-sjis, and en-sjis cannot be used freely in subexpressions, since they return parts of their values in r7. Y may be an expression, register, or integer, while Z must be a register or an integer.

Name Operator Code C-like Description
CCL_PLUS + 0x00 X = Y + Z
CCL_MINUS - 0x01 X = Y - Z
CCL_MUL * 0x02 X = Y * Z
CCL_DIV / 0x03 X = Y / Z
CCL_MOD % 0x04 X = Y % Z
CCL_AND & 0x05 X = Y & Z
CCL_OR | 0x06 X = Y | Z
CCL_XOR ^ 0x07 X = Y ^ Z
CCL_LSH << 0x08 X = Y << Z
CCL_RSH >> 0x09 X = Y >> Z
CCL_LSH8 <8 0x0A X = (Y << 8) | Z
CCL_RSH8 >8 0x0B X = Y >> 8, r[7] = Y & 0xFF
CCL_DIVMOD // 0x0C X = Y / Z, r[7] = Y % Z
CCL_LS < 0x10 X = (X < Y)
CCL_GT > 0x11 X = (X > Y)
CCL_EQ == 0x12 X = (X == Y)
CCL_LE <= 0x13 X = (X <= Y)
CCL_GE >= 0x14 X = (X >= Y)
CCL_NE != 0x15 X = (X != Y)
CCL_ENCODE_SJIS en-sjis 0x16 X = HIGHER_BYTE (SJIS (Y, Z))
r[7] = LOWER_BYTE (SJIS (Y, Z)
CCL_DECODE_SJIS de-sjis 0x17 X = HIGHER_BYTE (DE-SJIS (Y, Z))
r[7] = LOWER_BYTE (DE-SJIS (Y, Z))

The CCL operators are as in C, with the addition of CCL_LSH8, CCL_RSH8, CCL_DIVMOD, CCL_ENCODE_SJIS, and CCL_DECODE_SJIS. The CCL_ENCODE_SJIS and CCL_DECODE_SJIS treat their first and second bytes as the high and low bytes of a two-byte character code. (SJIS stands for Shift JIS, an encoding of Japanese characters used by Microsoft. CCL_ENCODE_SJIS is a complicated transformation of the Japanese standard JIS encoding to Shift JIS. CCL_DECODE_SJIS is its inverse.) It is somewhat odd to represent the SJIS operations in infix form.