Home | History | Annotate | Line # | Download | only in opcode
      1  1.1  christos /* Opcode table header for Visium.
      2  1.1  christos 
      3  1.8  christos    Copyright (C) 2003-2025 Free Software Foundation, Inc.
      4  1.1  christos 
      5  1.1  christos    This file is part of GDB, GAS, and GNU binutils.
      6  1.1  christos 
      7  1.1  christos    GDB, GAS and the GNU binutils are free software; you can redistribute
      8  1.1  christos    them and/or modify them under the terms of the GNU General Public
      9  1.1  christos    License as published by the Free Software Foundation; either version 3,
     10  1.1  christos    or (at your option) any later version.
     11  1.1  christos 
     12  1.1  christos    GDB, GAS, and the GNU binutils are distributed in the hope that they
     13  1.1  christos    will be useful, but WITHOUT ANY WARRANTY; without even the implied
     14  1.1  christos    warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See
     15  1.1  christos    the GNU General Public License for more details.
     16  1.1  christos 
     17  1.1  christos    You should have received a copy of the GNU General Public License
     18  1.1  christos    along with this file; see the file COPYING3.  If not, write to the Free
     19  1.1  christos    Software Foundation, 51 Franklin Street - Fifth Floor, Boston,
     20  1.1  christos    MA 02110-1301, USA.  */
     21  1.1  christos 
     22  1.1  christos enum visium_opcode_arch_val
     23  1.1  christos {
     24  1.1  christos   VISIUM_OPCODE_ARCH_DEF = 0,
     25  1.1  christos   VISIUM_OPCODE_ARCH_GR5,
     26  1.1  christos   VISIUM_OPCODE_ARCH_GR6,
     27  1.1  christos   VISIUM_OPCODE_ARCH_BAD
     28  1.1  christos };
     29  1.1  christos 
     30  1.1  christos /* The highest architecture in the table.  */
     31  1.1  christos #define VISIUM_OPCODE_ARCH_MAX (VISIUM_OPCODE_ARCH_BAD - 1)
     32  1.1  christos 
     33  1.1  christos /* Given an enum visium_opcode_arch_val, return the bitmask to use in
     34  1.1  christos    insn encoding/decoding.  */
     35  1.1  christos #define VISIUM_OPCODE_ARCH_MASK(arch) (1 << (arch))
     36  1.1  christos 
     37  1.1  christos /* Some defines to make life easy.  */
     38  1.1  christos #define MASK_DEF VISIUM_OPCODE_ARCH_MASK (VISIUM_OPCODE_ARCH_DEF)
     39  1.1  christos #define MASK_GR5 VISIUM_OPCODE_ARCH_MASK (VISIUM_OPCODE_ARCH_GR5)
     40  1.1  christos #define MASK_GR6 VISIUM_OPCODE_ARCH_MASK (VISIUM_OPCODE_ARCH_GR6)
     41  1.1  christos 
     42  1.1  christos /* Bit masks of architectures supporting the insn.  */
     43  1.1  christos #define def (MASK_DEF | MASK_GR5 | MASK_GR6)
     44  1.1  christos #define gr5 (MASK_GR5 | MASK_GR6)
     45  1.1  christos #define gr6 (MASK_GR6)
     46  1.1  christos 
     47  1.1  christos /* The condition code field is not used (zero) for most instructions.
     48  1.1  christos    BRR and BRA make normal use of it. Floating point instructions use
     49  1.1  christos    it as a sub-opcode.  */
     50  1.1  christos #define CC_MASK (0xf << 27)
     51  1.1  christos 
     52  1.1  christos /* It seems a shame not to use these bits in a class 0 instruction,
     53  1.1  christos    since they could be used to extend the range of the branch.  */
     54  1.1  christos #define CLASS0_UNUSED_MASK (0x1f << 16)
     55  1.1  christos 
     56  1.1  christos /* For class 1 instructions the following bit is unused.  */
     57  1.1  christos #define CLASS1_UNUSED_MASK (1 << 9)
     58  1.1  christos 
     59  1.1  christos /* For class 1 instructions this field gives the index for a write
     60  1.1  christos    instruction, the specific operation for an EAM instruction, or
     61  1.1  christos    the floating point destination register for a floating point
     62  1.1  christos    instruction.  */
     63  1.1  christos #define CLASS1_INDEX_MASK (0x1f << 10)
     64  1.1  christos 
     65  1.1  christos /* For class 3 instructions the following field gives the destination
     66  1.1  christos    general register.  */
     67  1.1  christos #define CLASS3_DEST_MASK (0x1f << 10)
     68  1.1  christos 
     69  1.1  christos /* For class 1 and class 3 instructions the following bit selects an
     70  1.1  christos    EAM write/read rather than a memory write/read.  */
     71  1.1  christos #define EAM_SELECT_MASK (1 << 15)
     72  1.1  christos 
     73  1.1  christos /* Floating point instructions are distinguished from general EAM
     74  1.1  christos    instructions by the following bit.  */
     75  1.1  christos #define FP_SELECT_MASK (1 << 3)
     76  1.1  christos 
     77  1.1  christos /* For both class 1 and class 3 the following fields give, where
     78  1.1  christos    appropriate the srcA and srcB registers whether floating point
     79  1.1  christos    or general.  */
     80  1.1  christos #define SRCA_MASK (0x1f << 16)
     81  1.1  christos #define SRCB_MASK (0x1f << 4)
     82  1.1  christos 
     83  1.1  christos /* The class 3 interrupt bit. It turns a BRA into a SYS1, and an
     84  1.1  christos    RFLAG into a SYS2. This bit should not be set in the user's
     85  1.1  christos    class 3 instructions. This bit is also used in class 3
     86  1.1  christos    to distinguish between floating point and other EAM operations.
     87  1.1  christos    (see FP_SELECT_MASK).  */
     88  1.1  christos #define CLASS3_INT (1 << 3)
     89  1.1  christos 
     90  1.1  christos /* Class 3 shift instructions use this bit to indicate that the
     91  1.1  christos    srcB field is a 5 bit immediate shift count rather than a
     92  1.1  christos    register number.  */
     93  1.1  christos #define CLASS3_SOURCEB_IMMED (1 << 9)
     94  1.1  christos 
     95  1.1  christos #define BMD 0x02630004
     96  1.1  christos #define BMI 0x82230004
     97  1.1  christos #define DSI 0x82800004
     98  1.1  christos #define ENI 0x02a00004
     99  1.1  christos #define RFI 0x82fe01d4
    100  1.1  christos 
    101  1.1  christos struct reg_entry
    102  1.1  christos {
    103  1.3  christos   const char *name;
    104  1.1  christos   unsigned char code;
    105  1.1  christos };
    106  1.1  christos 
    107  1.3  christos static const struct reg_entry gen_reg_table[] ATTRIBUTE_UNUSED =
    108  1.1  christos {
    109  1.1  christos   {"fp", 0x16},
    110  1.1  christos   {"r0", 0x0},
    111  1.1  christos   {"r1", 0x1},
    112  1.1  christos   {"r10", 0xA},
    113  1.1  christos   {"r11", 0xB},
    114  1.1  christos   {"r12", 0xC},
    115  1.1  christos   {"r13", 0xD},
    116  1.1  christos   {"r14", 0xE},
    117  1.1  christos   {"r15", 0xF},
    118  1.1  christos   {"r16", 0x10},
    119  1.1  christos   {"r17", 0x11},
    120  1.1  christos   {"r18", 0x12},
    121  1.1  christos   {"r19", 0x13},
    122  1.1  christos   {"r2", 0x2},
    123  1.1  christos   {"r20", 0x14},
    124  1.1  christos   {"r21", 0x15},
    125  1.1  christos   {"r22", 0x16},
    126  1.1  christos   {"r23", 0x17},
    127  1.1  christos   {"r24", 0x18},
    128  1.1  christos   {"r25", 0x19},
    129  1.1  christos   {"r26", 0x1a},
    130  1.1  christos   {"r27", 0x1b},
    131  1.1  christos   {"r28", 0x1c},
    132  1.1  christos   {"r29", 0x1d},
    133  1.1  christos   {"r3", 0x3},
    134  1.1  christos   {"r30", 0x1e},
    135  1.1  christos   {"r31", 0x1f},
    136  1.1  christos   {"r4", 0x4},
    137  1.1  christos   {"r5", 0x5},
    138  1.1  christos   {"r6", 0x6},
    139  1.1  christos   {"r7", 0x7},
    140  1.1  christos   {"r8", 0x8},
    141  1.1  christos   {"r9", 0x9},
    142  1.1  christos   {"sp", 0x17},
    143  1.1  christos };
    144  1.1  christos 
    145  1.3  christos static const struct reg_entry fp_reg_table[] ATTRIBUTE_UNUSED =
    146  1.1  christos {
    147  1.1  christos   {"f0", 0x0},
    148  1.1  christos   {"f1", 0x1},
    149  1.1  christos   {"f10", 0xa},
    150  1.1  christos   {"f11", 0xb},
    151  1.1  christos   {"f12", 0xc},
    152  1.1  christos   {"f13", 0xd},
    153  1.1  christos   {"f14", 0xe},
    154  1.1  christos   {"f15", 0xf},
    155  1.1  christos   {"f2", 0x2},
    156  1.1  christos   {"f3", 0x3},
    157  1.1  christos   {"f4", 0x4},
    158  1.1  christos   {"f5", 0x5},
    159  1.1  christos   {"f6", 0x6},
    160  1.1  christos   {"f7", 0x7},
    161  1.1  christos   {"f8", 0x8},
    162  1.1  christos   {"f9", 0x9},
    163  1.1  christos };
    164  1.1  christos 
    165  1.1  christos static const struct cc_entry
    166  1.1  christos {
    167  1.3  christos   const char *name;
    168  1.1  christos   int code;
    169  1.3  christos } cc_table [] ATTRIBUTE_UNUSED =
    170  1.1  christos {
    171  1.1  christos   {"cc", 6},
    172  1.1  christos   {"cs", 2},
    173  1.1  christos   {"eq", 1},
    174  1.1  christos   {"fa", 0},
    175  1.1  christos   {"ge", 9},
    176  1.1  christos   {"gt", 10},
    177  1.1  christos   {"hi", 11},
    178  1.1  christos   {"le", 12},
    179  1.1  christos   {"ls", 13},
    180  1.1  christos   {"lt", 14},
    181  1.1  christos   {"nc", 8},
    182  1.1  christos   {"ne", 5},
    183  1.1  christos   {"ns", 4},
    184  1.1  christos   {"oc", 7},
    185  1.1  christos   {"os", 3},
    186  1.1  christos   {"tr", 15},
    187  1.1  christos };
    188  1.1  christos 
    189  1.1  christos enum addressing_mode
    190  1.1  christos {
    191  1.1  christos   mode_d,	/* register := */
    192  1.1  christos   mode_a,	/* op= register */
    193  1.1  christos   mode_da,	/* register := register */
    194  1.1  christos   mode_ab,	/* register * register */
    195  1.1  christos   mode_dab,	/* register := register * register */
    196  1.1  christos   mode_iab,	/* 5-bit immediate * register * register */
    197  1.1  christos   mode_0ab,	/* zero * register * register */
    198  1.1  christos   mode_da0,	/* register := register * zero */
    199  1.1  christos   mode_cad,	/* condition * register * register */
    200  1.1  christos   mode_das,	/* register := register * 5-bit immed/register shift count */
    201  1.1  christos   mode_di,	/* register := 5-bit immediate */
    202  1.1  christos   mode_ir,	/* 5-bit immediate * register */
    203  1.1  christos   mode_ai,	/* register 16-bit unsigned immediate */
    204  1.1  christos   mode_i,	/* 16-bit unsigned immediate */
    205  1.1  christos   mode_bax,	/* register * register * 5-bit immediate */
    206  1.1  christos   mode_dax,	/* register := register * 5-bit immediate */
    207  1.1  christos   mode_s,	/* special mode */
    208  1.1  christos   mode_sr,	/* special mode with register */
    209  1.1  christos   mode_ci,	/* condition * 16-bit signed word displacement */
    210  1.1  christos   mode_fdab,	/* float := float * float */
    211  1.1  christos   mode_ifdab,	/* fpinst: 4-bit immediate * float * float * float */
    212  1.1  christos   mode_idfab,	/* fpuread: 4-bit immediate * register * float * float */
    213  1.1  christos   mode_fda,	/* float := float */
    214  1.1  christos   mode_fdra,	/* float := register */
    215  1.1  christos   mode_rdfab,	/* register := float * float */
    216  1.1  christos   mode_rdfa,	/* register := float */
    217  1.1  christos   mode_rrr,	/* 3 register sources and destinations (block move) */
    218  1.1  christos };
    219  1.1  christos 
    220  1.1  christos #define class0 (0<<25)
    221  1.1  christos #define class1 (1<<25)
    222  1.1  christos #define class2 (2<<25)
    223  1.1  christos #define class3 (3<<25)
    224  1.1  christos 
    225  1.1  christos static const struct opcode_entry
    226  1.1  christos {
    227  1.3  christos   const char *mnem;
    228  1.1  christos   enum addressing_mode mode;
    229  1.1  christos   unsigned code;
    230  1.1  christos   char flags;
    231  1.1  christos }
    232  1.3  christos opcode_table[] ATTRIBUTE_UNUSED =
    233  1.1  christos {
    234  1.1  christos   { "adc.b",    mode_dab,  class3|(1<<21)|(1), def },
    235  1.1  christos   { "adc.l",    mode_dab,  class3|(1<<21)|(4), def },
    236  1.1  christos   { "adc.w",    mode_dab,  class3|(1<<21)|(2), def },
    237  1.1  christos   { "add.b",    mode_dab,  class3|(0<<21)|(1), def },
    238  1.1  christos   { "add.l",    mode_dab,  class3|(0<<21)|(4), def },
    239  1.1  christos   { "add.w",    mode_dab,  class3|(0<<21)|(2), def },
    240  1.1  christos   { "addi",     mode_ai,   class2, def },
    241  1.1  christos   { "and.b",    mode_dab,  class3|(10<<21)|(1), def},
    242  1.1  christos   { "and.l",    mode_dab,  class3|(10<<21)|(4), def },
    243  1.1  christos   { "and.w",    mode_dab,  class3|(10<<21)|(2), def },
    244  1.1  christos   { "asl.b",    mode_das,  class3|(7<<21)|(1), def },
    245  1.1  christos   { "asl.l",    mode_das,  class3|(7<<21)|(4), def },
    246  1.1  christos   { "asl.w",    mode_das,  class3|(7<<21)|(2), def },
    247  1.1  christos   { "asld",     mode_a,    class1|(15<<21)|(1<<15)|(11<<10)|(4), def },
    248  1.1  christos   { "asr.b",    mode_das,  class3|(5<<21)|(1), def },
    249  1.1  christos   { "asr.l",    mode_das,  class3|(5<<21)|(4), def },
    250  1.1  christos   { "asr.w",    mode_das,  class3|(5<<21)|(2), def },
    251  1.1  christos   { "asrd",     mode_a,    class1|(15<<21)|(1<<15)|(9<<10)|(4), def },
    252  1.1  christos   { "bmd",      mode_rrr,  class1|(3<<21)|(3<<16)|(4), gr6 },
    253  1.1  christos   { "bmi",      mode_rrr,  class1|(1<<21)|(3<<16)|(4), gr6 },
    254  1.1  christos   { "bra",      mode_cad,  class3|(12<<21)|(4), def },
    255  1.1  christos   { "brr",      mode_ci,   class0, def },
    256  1.1  christos   { "cmp.b",    mode_0ab,  class3|(2<<21)|(1), def },
    257  1.1  christos   { "cmp.l",    mode_0ab,  class3|(2<<21)|(4), def },
    258  1.1  christos   { "cmp.w",    mode_0ab,  class3|(2<<21)|(2), def },
    259  1.1  christos   { "cmpc.b",   mode_0ab,  class3|(3<<21)|(1), def },
    260  1.1  christos   { "cmpc.l",   mode_0ab,  class3|(3<<21)|(4), def },
    261  1.1  christos   { "cmpc.w",   mode_0ab,  class3|(3<<21)|(2), def },
    262  1.1  christos   { "divds",    mode_a,    class1|(15<<21)|(1<<15)|(6<<10)|(4), def },
    263  1.1  christos   { "divdu",    mode_a,    class1|(15<<21)|(1<<15)|(7<<10)|(4), def },
    264  1.1  christos   { "divs",     mode_a,    class1|(15<<21)|(1<<15)|(2<<10)|(4), def },
    265  1.1  christos   { "divu",     mode_a,    class1|(15<<21)|(1<<15)|(3<<10)|(4), def },
    266  1.1  christos   { "dsi",      mode_s,    class1|(4<<21)|(4), def },
    267  1.1  christos   { "eamread",  mode_di,   class3|(15<<21)|(1<<15)|(1<<9)|(4), def },
    268  1.1  christos   { "eamwrite", mode_iab,  class1|(15<<21)|(1<<15)|(4), def },
    269  1.1  christos   { "eni",      mode_s,    class1|(5<<21)|(4), def },
    270  1.1  christos   { "extb.b",   mode_da,   class3|(14<<21)|(1), def },
    271  1.1  christos   { "extb.l",   mode_da,   class3|(14<<21)|(4), def },
    272  1.1  christos   { "extb.w",   mode_da,   class3|(14<<21)|(2), def },
    273  1.1  christos   { "extw.l",   mode_da,   class3|(4<<21)|(4), def },
    274  1.1  christos   { "extw.w",   mode_da,   class3|(4<<21)|(2), def },
    275  1.1  christos   { "fabs",     mode_fda,  class1|(7<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
    276  1.1  christos   { "fadd",     mode_fdab, class1|(1<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
    277  1.1  christos   { "fcmp",     mode_rdfab,class3|(10<<27)|(15<<21)|(1<<15)|(1<<9)|(1<<3)|(4), gr5 },
    278  1.1  christos   { "fcmpe",    mode_rdfab,class3|(11<<27)|(15<<21)|(1<<15)|(1<<9)|(1<<3)|(4), gr5 },
    279  1.1  christos   { "fdiv",     mode_fdab, class1|(4<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
    280  1.1  christos   { "fload",    mode_fdra, class1|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
    281  1.1  christos   { "fmove",    mode_fda,  class1|(12<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5},
    282  1.1  christos   { "fmult",    mode_fdab, class1|(3<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
    283  1.1  christos   { "fneg",     mode_fda,  class1|(6<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
    284  1.1  christos   { "fpinst",   mode_ifdab,class1|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
    285  1.1  christos   { "fpuread",  mode_idfab,class3|(15<<21)|(1<<15)|(1<<9)|(1<<3)|(4), gr5 },
    286  1.1  christos   { "fsqrt",    mode_fda,  class1|(5<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
    287  1.1  christos   { "fstore",   mode_rdfa, class3|(15<<21)|(1<<15)|(1<<9)|(1<<3)|(4), gr5 },
    288  1.1  christos   { "fsub",     mode_fdab, class1|(2<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
    289  1.1  christos   { "ftoi",     mode_fda,  class1|(8<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
    290  1.1  christos   { "itof",     mode_fda,  class1|(9<<27)|(15<<21)|(1<<15)|(1<<3)|(4), gr5 },
    291  1.1  christos   { "lsr.b",    mode_das,  class3|(6<<21)|(1), def },
    292  1.1  christos   { "lsr.l",    mode_das,  class3|(6<<21)|(4), def },
    293  1.1  christos   { "lsr.w",    mode_das,  class3|(6<<21)|(2), def },
    294  1.1  christos   { "lsrd",     mode_a,    class1|(15<<21)|(1<<15)|(10<<10)|(4), def },
    295  1.1  christos   { "move.b",   mode_da0,  class3|(9<<21)|(1), def },
    296  1.1  christos   { "move.l",   mode_da0,  class3|(9<<21)|(4), def },
    297  1.1  christos   { "move.w",   mode_da0,  class3|(9<<21)|(2), def },
    298  1.1  christos   { "movil",    mode_ai,   class2|(4<<21), def },
    299  1.1  christos   { "moviq",    mode_ai,   class2|(6<<21), def },
    300  1.1  christos   { "moviu",    mode_ai,   class2|(5<<21), def },
    301  1.1  christos   { "mults",    mode_ab,   class1|(15<<21)|(1<<15)|(0<<10)|(4), def },
    302  1.1  christos   { "multu",    mode_ab,   class1|(15<<21)|(1<<15)|(1<<10)|(4), def },
    303  1.1  christos   { "nop",      mode_s,    class0, def },
    304  1.1  christos   { "not.b",    mode_da,   class3|(11<<21)|(1), def },
    305  1.1  christos   { "not.l",    mode_da,   class3|(11<<21)|(4), def },
    306  1.1  christos   { "not.w",    mode_da,   class3|(11<<21)|(2), def },
    307  1.1  christos   { "or.b",     mode_dab,  class3|(9<<21)|(1), def },
    308  1.1  christos   { "or.l",     mode_dab,  class3|(9<<21)|(4), def },
    309  1.1  christos   { "or.w",     mode_dab,  class3|(9<<21)|(2), def },
    310  1.1  christos   { "read.b",   mode_dax,  class3|(15<<21)|(1<<9)|(1), def },
    311  1.1  christos   { "read.l",   mode_dax,  class3|(15<<21)|(1<<9)|(4), def },
    312  1.1  christos   { "read.w",   mode_dax,  class3|(15<<21)|(1<<9)|(2), def },
    313  1.1  christos   { "readmda",  mode_d,    class3|(15<<21)|(1<<15)|(1<<9)|(4), def },
    314  1.1  christos   { "readmdb",  mode_d,    class3|(15<<21)|(1<<15)|(1<<9)|(1<<4)|(4), def },
    315  1.1  christos   { "readmdc",  mode_d,    class3|(15<<21)|(1<<15)|(1<<9)|(2<<4)|(4), def },
    316  1.1  christos   { "rfi",      mode_s,    class1|(7<<21)|(30<<16)|(29<<4)|(4), def },
    317  1.1  christos   { "rflag",    mode_d,    class3|(13<<21)|(4), def },
    318  1.1  christos   { "stop",     mode_ir,   class1|(0<<21)|(4), def },
    319  1.1  christos   { "sub.b",    mode_dab,  class3|(2<<21)|(1), def },
    320  1.1  christos   { "sub.l",    mode_dab,  class3|(2<<21)|(4), def },
    321  1.1  christos   { "sub.w",    mode_dab,  class3|(2<<21)|(2), def },
    322  1.1  christos   { "subc.b",   mode_dab,  class3|(3<<21)|(1), def },
    323  1.1  christos   { "subc.l",   mode_dab,  class3|(3<<21)|(4), def },
    324  1.1  christos   { "subc.w",   mode_dab,  class3|(3<<21)|(2), def },
    325  1.1  christos   { "subi",     mode_ai,   class2|(2<<21), def },
    326  1.1  christos   { "trace",    mode_ir,   class1|(13<<21), def },
    327  1.1  christos   { "write.b",  mode_bax,  class1|(15<<21)|(1), def },
    328  1.1  christos   { "write.l",  mode_bax,  class1|(15<<21)|(4), def },
    329  1.1  christos   { "write.w",  mode_bax,  class1|(15<<21)|(2), def },
    330  1.1  christos   { "writemd",  mode_ab,   class1|(15<<21)|(1<<15)|(4<<10)|(4), def },
    331  1.1  christos   { "writemdc", mode_a,    class1|(15<<21)|(1<<15)|(5<<10)|(4), def },
    332  1.1  christos   { "wrtl",     mode_i,    class2|(8<<21), gr6 },
    333  1.1  christos   { "wrtu",     mode_i,    class2|(9<<21), gr6 },
    334  1.1  christos   { "xor.b",    mode_dab,  class3|(8<<21)|(1), def },
    335  1.1  christos   { "xor.l",    mode_dab,  class3|(8<<21)|(4), def },
    336  1.1  christos   { "xor.w",    mode_dab,  class3|(8<<21)|(2), def },
    337  1.1  christos };
    338  1.3  christos 
    339