typedef struct {
gint64 gr[5]; /* R2-R6 */
gdouble fp[3]; /* F0-F2 */
-} __attribute__ ((packed)) RegParm;
+} __attribute__ ((__packed__)) RegParm;
typedef struct {
RR_Format basr;
void *pTrigger;
RXY_Format lg;
RXY_Format trigger;
-} __attribute__ ((packed)) breakpoint_t;
+} __attribute__ ((__packed__)) breakpoint_t;
/*========================= End of Typedefs ========================*/
gboolean
mono_arch_have_fast_tls (void)
{
- return FALSE;
+ return TRUE;
}
/*========================= End of Function ========================*/
case OP_S390_SETF4RET:
s390_ledbr (code, ins->dreg, ins->sreg1);
break;
+ case OP_TLS_GET: {
+ if (s390_is_imm16 (ins->inst_offset)) {
+ s390_lghi (code, s390_r13, ins->inst_offset);
+ } else if (s390_is_imm32 (ins->inst_offset)) {
+ s390_lgfi (code, s390_r13, ins->inst_offset);
+ } else {
+ S390_SET (code, s390_r13, ins->inst_offset);
+ }
+ s390_ear (code, s390_r1, 0);
+ s390_sllg(code, s390_r1, s390_r1, 0, 32);
+ s390_ear (code, s390_r1, 1);
+ s390_lg (code, ins->dreg, s390_r13, s390_r1, 0);
+ }
+ break;
+ case OP_TLS_SET: {
+ if (s390_is_imm16 (ins->inst_offset)) {
+ s390_lghi (code, s390_r13, ins->inst_offset);
+ } else if (s390_is_imm32 (ins->inst_offset)) {
+ s390_lgfi (code, s390_r13, ins->inst_offset);
+ } else {
+ S390_SET (code, s390_r13, ins->inst_offset);
+ }
+ s390_ear (code, s390_r1, 0);
+ s390_sllg(code, s390_r1, s390_r1, 0, 32);
+ s390_ear (code, s390_r1, 1);
+ s390_stg (code, ins->sreg1, s390_r13, s390_r1, 0);
+ }
+ break;
case OP_JMP: {
if (cfg->method->save_lmf)
restoreLMF(code, cfg->frame_reg, cfg->stack_usage);
{
MonoJumpInfo *patch_info;
- mono_error_init (error);
+ error_init (error);
for (patch_info = ji; patch_info; patch_info = patch_info->next) {
unsigned char *ip = patch_info->ip.i + code;
mono_arch_regname (tree->sreg1));
done = 1;
break;
+ case OP_TLS_GET:
+ printf ("[0x%lx(0x%lx,%s)]", tree->inst_offset,
+ tree->inst_imm,
+ mono_arch_regname (tree->sreg1));
+ done = 1;
+ break;
+ case OP_TLS_SET:
+ printf ("[0x%lx(0x%lx,%s)]", tree->inst_offset,
+ tree->inst_imm,
+ mono_arch_regname (tree->sreg1));
+ done = 1;
+ break;
case OP_S390_BKCHAIN:
printf ("[previous_frame(%s)]",
mono_arch_regname (tree->sreg1));