From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:50149) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YOoPj-0000Am-3u for qemu-devel@nongnu.org; Fri, 20 Feb 2015 09:18:44 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1YOoPh-0005bh-EZ for qemu-devel@nongnu.org; Fri, 20 Feb 2015 09:18:43 -0500 Received: from mx1.redhat.com ([209.132.183.28]:51734) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1YOoPg-0005bC-Tq for qemu-devel@nongnu.org; Fri, 20 Feb 2015 09:18:41 -0500 From: =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= Date: Fri, 20 Feb 2015 15:18:25 +0100 Message-Id: <1424441905-5735-3-git-send-email-rkrcmar@redhat.com> In-Reply-To: <1424441905-5735-1-git-send-email-rkrcmar@redhat.com> References: <1424441905-5735-1-git-send-email-rkrcmar@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PATCH 2/2] milkymist-pfpu: fix GCC 5.0.0 aggressive-loop-optimizations warning List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Michael Walle man gcc: Warn if in a loop with constant number of iterations the compiler detects undefined behavior in some statement during one or more of the iterations. Refactored the code a bit to avoid the GCC warning, in an objectionable way, hw/misc/milkymist-pfpu.c: In function =E2=80=98pfpu_write=E2=80=99: hw/misc/milkymist-pfpu.c:365:20: error: loop exit may only be reached a= fter undefined behavior [-Werror=3Daggressive-loop-optimizations] if (i++ >=3D MICROCODE_WORDS) { ^ hw/misc/milkymist-pfpu.c:167:14: note: possible undefined statement is = here uint32_t insn =3D s->microcode[pc]; ^ Signed-off-by: Radim Kr=C4=8Dm=C3=A1=C5=99 --- hw/misc/milkymist-pfpu.c | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/hw/misc/milkymist-pfpu.c b/hw/misc/milkymist-pfpu.c index 609f33f9cd14..133f5b8c5153 100644 --- a/hw/misc/milkymist-pfpu.c +++ b/hw/misc/milkymist-pfpu.c @@ -164,6 +164,13 @@ output_queue_advance(MilkymistPFPUState *s) static int pfpu_decode_insn(MilkymistPFPUState *s) { uint32_t pc =3D s->regs[R_PC]; + + if (pc > MICROCODE_WORDS) { + error_report("milkymist_pfpu: too many instructions " + "executed in microcode. No VECTOUT?"); + return 0; + } + uint32_t insn =3D s->microcode[pc]; uint32_t reg_a =3D (insn >> 18) & 0x7f; uint32_t reg_b =3D (insn >> 11) & 0x7f; @@ -348,7 +355,6 @@ static int pfpu_decode_insn(MilkymistPFPUState *s) static void pfpu_start(MilkymistPFPUState *s) { int x, y; - int i; =20 for (y =3D 0; y <=3D s->regs[R_VMESHLAST]; y++) { for (x =3D 0; x <=3D s->regs[R_HMESHLAST]; x++) { @@ -359,15 +365,7 @@ static void pfpu_start(MilkymistPFPUState *s) s->gp_regs[GPR_Y] =3D y; =20 /* run microcode on this position */ - i =3D 0; - while (pfpu_decode_insn(s)) { - /* decode at most MICROCODE_WORDS instructions */ - if (i++ >=3D MICROCODE_WORDS) { - error_report("milkymist_pfpu: too many instructions = " - "executed in microcode. No VECTOUT?"); - break; - } - } + while (pfpu_decode_insn(s)); =20 /* reset pc for next run */ s->regs[R_PC] =3D 0; --=20 2.3.0