From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1992 invoked by alias); 8 Jul 2015 20:22:34 -0000 Mailing-List: contact jit-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Subscribe: Sender: jit-owner@gcc.gnu.org Received: (qmail 1976 invoked by uid 89); 8 Jul 2015 20:22:31 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Checked: by ClamAV 0.98.7 on sourceware.org X-Virus-Found: No X-HELO: mail-yk0-f172.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:in-reply-to:references:date :message-id:subject:from:to:cc:content-type; bh=Er0YDOvNUddxS82SVLCkJG8jUz8Stzrrx5AuxMd2/K4=; b=MJIHLnVbjWno991bLUxKoyqhTZtHhomqSo4r+ANabKuOUnWLEayBYQ1AfnPYcfjTKZ P2qrEhpJB5KxaS5A99m64vensogZ8tqOUISlqTzry4ZpxqPhc5YB+atsn8TOAsWjMIuY /ZhgelpOuQTut5apGRMsdSMaYxPA1JlNSLmfmfNZI0nPaqyBFygxwGF7917wOBeMBjvp GEpMDZlM6SVzVsW4Z3/Vb23OdooVxtPRgOkzbFn+58byc9JDhbvYuIDAL8vNZ6vsUaXU psel2JQ++X+TZI6TaJl4gT90Z66BbWFLN4UL68PLhCFM0/zdzZAip+4NhbExXCJK+euu nwJg== X-Gm-Message-State: ALoCoQl+LnP00/6DWDX2618dSbz/LKiM0SUrrl2UW4/FKlo3ZqUgbXZlWp3KosUJrdCtyrryFGor MIME-Version: 1.0 X-Received: by 10.13.229.198 with SMTP id o189mr13496914ywe.108.1436386948912; Wed, 08 Jul 2015 13:22:28 -0700 (PDT) In-Reply-To: References: <1436365266.24803.65.camel@surprise> <1436367926.24803.71.camel@surprise> <1436369443.24803.75.camel@surprise> <1436377619.24803.97.camel@surprise> Date: Thu, 01 Jan 2015 00:00:00 -0000 Message-ID: Subject: Re: Filed PR jit/66812 for the code generation issue From: Dibyendu Majumdar To: David Malcolm Cc: jit@gcc.gnu.org Content-Type: text/plain; charset=UTF-8 X-SW-Source: 2015-q3/txt/msg00042.txt.bz2 Here is what I think the flow is. part 1 -------- 1 [2] LOADNIL 0 0 entry: cl = (struct ravi_LClosure *)L->ci->func->value_.gc; (void)raviV_op_loadnil (L->ci, (int)0, (int)0); This sets register 0 (local variable IX) to NIL 2 [3] LOADK 1 -1 ; 10 (&L->ci->u.l.base[(int)1])->value_.i = (&cl->p->k[(int)0])->value_.i; (&L->ci->u.l.base[(int)1])->tt_ = (&cl->p->k[(int)0])->tt_; This sets the register at 1 (temporary) to 10. 3 [3] TEST 1 1 4 [3] JMP 0 0 ; to 5 The above two bytecodes go together. This says that if register 1 is true then skip the JMP else JMP. So we get: comparison_0_5 = (&L->ci->u.l.base[(int)1])->tt_ == (int)0; comparison_0_6 = (&L->ci->u.l.base[(int)1])->tt_ == (int)1; comparison_0_7 = (&L->ci->u.l.base[(int)1])->value_.b == (int)0; isfalse_0_4 = comparison_0_5 || comparison_0_6 && comparison_0_7; if (!(isfalse_0_4)) goto OP_TEST_do_jmp_2_8; else goto OP_TEST_do_skip_2_9; The test is checking that register 1 is true (which it is as it has the constant 10) - then goto skip_2_9.