From patchwork Tue Apr 9 21:39:21 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stafford Horne X-Patchwork-Id: 32237 Received: (qmail 42263 invoked by alias); 9 Apr 2019 21:40:05 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 42105 invoked by uid 89); 9 Apr 2019 21:40:04 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-23.8 required=5.0 tests=AWL, BAYES_00, FREEMAIL_FROM, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_PASS, UPPERCASE_50_75 autolearn=ham version=3.3.1 spammy=holder, 4668 X-HELO: mail-pf1-f193.google.com Received: from mail-pf1-f193.google.com (HELO mail-pf1-f193.google.com) (209.85.210.193) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 09 Apr 2019 21:39:52 +0000 Received: by mail-pf1-f193.google.com with SMTP id 188so41258pfd.8; Tue, 09 Apr 2019 14:39:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DGpwuWU8EXHjLjICbtMW1UQDAVTOONtDfQV+CG/tc7g=; b=C99aP7tBRt0Buw7Yij4TrCXSJdHuMZz8kXBRN0jrt5kcpWsAymk4+z14Yp0TjZ3UWN UcsXjb3GTax0N22VTPqsuZ7yls1lUpmAhKf0JLRQzip3DZo72Evehi6YN4+i/X93Te4Z 7u8M2igWtm7WtJRtoaNdQo0dr6x8QMyndeDzGxzXOIZNp+P2FNp07Fnv6C9KFab6pRaL UHeiMShJ4JGl3wJyeJaGC4v+IFlwafOQMPMprigf7D0FimCUo21YbKba8NmAvqEW3w+5 lnbR7UlVHeB0mDhZjLf1kjIiPo8oWMmubGnh9Uo2YAfbs9RUA3Peir19SvdKc65wywYn JTqw== Return-Path: Received: from localhost (g191.61-115-60.ppp.wakwak.ne.jp. [61.115.60.191]) by smtp.gmail.com with ESMTPSA id i135sm48062435pgd.41.2019.04.09.14.39.47 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Tue, 09 Apr 2019 14:39:48 -0700 (PDT) From: Stafford Horne To: GDB patches , GNU Binutils Cc: Andrey Bacherov , Openrisc , Stafford Horne Subject: [PATCH v2 2/6] opcodes: Regenerate opcodes for orfp64a32 spec Date: Wed, 10 Apr 2019 06:39:21 +0900 Message-Id: <20190409213925.32699-3-shorne@gmail.com> In-Reply-To: <20190409213925.32699-1-shorne@gmail.com> References: <20190409213925.32699-1-shorne@gmail.com> MIME-Version: 1.0 X-IsSubscribed: yes opcodes/ChangeLog: * or1k-asm.c: Regenerated. * or1k-desc.c: Regenerated. * or1k-desc.h: Regenerated. * or1k-dis.c: Regenerated. * or1k-ibld.c: Regenerated. * or1k-opc.c: Regenerated. * or1k-opc.h: Regenerated. * or1k-opinst.c: Regenerated. --- opcodes/or1k-asm.c | 19 ++- opcodes/or1k-desc.c | 227 ++++++++++++++++++++++++++--- opcodes/or1k-desc.h | 330 +++++++++++++++++++++--------------------- opcodes/or1k-dis.c | 19 ++- opcodes/or1k-ibld.c | 114 +++++++++++++-- opcodes/or1k-opc.c | 166 ++++++++++++++++++--- opcodes/or1k-opc.h | 21 +-- opcodes/or1k-opinst.c | 51 +++++++ 8 files changed, 716 insertions(+), 231 deletions(-) diff --git a/opcodes/or1k-asm.c b/opcodes/or1k-asm.c index 7d058d03f5..f1e20e4ebc 100644 --- a/opcodes/or1k-asm.c +++ b/opcodes/or1k-asm.c @@ -466,8 +466,14 @@ or1k_cgen_parse_operand (CGEN_CPU_DESC cd, case OR1K_OPERAND_RA : errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_gpr, & fields->f_r2); break; + case OR1K_OPERAND_RAD32F : + errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_fd32r, & fields->f_r2); + break; case OR1K_OPERAND_RADF : - errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_fdr, & fields->f_r1); + errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_fdr, & fields->f_r2); + break; + case OR1K_OPERAND_RADI : + errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_i64r, & fields->f_r2); break; case OR1K_OPERAND_RASF : errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_fsr, & fields->f_r2); @@ -475,8 +481,11 @@ or1k_cgen_parse_operand (CGEN_CPU_DESC cd, case OR1K_OPERAND_RB : errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_gpr, & fields->f_r3); break; + case OR1K_OPERAND_RBD32F : + errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_fd32r, & fields->f_r3); + break; case OR1K_OPERAND_RBDF : - errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_fdr, & fields->f_r1); + errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_fdr, & fields->f_r3); break; case OR1K_OPERAND_RBSF : errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_fsr, & fields->f_r3); @@ -484,9 +493,15 @@ or1k_cgen_parse_operand (CGEN_CPU_DESC cd, case OR1K_OPERAND_RD : errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_gpr, & fields->f_r1); break; + case OR1K_OPERAND_RDD32F : + errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_fd32r, & fields->f_r1); + break; case OR1K_OPERAND_RDDF : errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_fdr, & fields->f_r1); break; + case OR1K_OPERAND_RDDI : + errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_i64r, & fields->f_r1); + break; case OR1K_OPERAND_RDSF : errmsg = cgen_parse_keyword (cd, strp, & or1k_cgen_opval_h_fsr, & fields->f_r1); break; diff --git a/opcodes/or1k-desc.c b/opcodes/or1k-desc.c index 486b0f2626..9835d012cd 100644 --- a/opcodes/or1k-desc.c +++ b/opcodes/or1k-desc.c @@ -134,6 +134,52 @@ static const CGEN_MACH or1k_cgen_mach_table[] = { { 0, 0, 0, 0 } }; +static CGEN_KEYWORD_ENTRY or1k_cgen_opval_h_gpr_entries[] = +{ + { "r0", 0, {0, {{{0, 0}}}}, 0, 0 }, + { "r1", 1, {0, {{{0, 0}}}}, 0, 0 }, + { "r2", 2, {0, {{{0, 0}}}}, 0, 0 }, + { "r3", 3, {0, {{{0, 0}}}}, 0, 0 }, + { "r4", 4, {0, {{{0, 0}}}}, 0, 0 }, + { "r5", 5, {0, {{{0, 0}}}}, 0, 0 }, + { "r6", 6, {0, {{{0, 0}}}}, 0, 0 }, + { "r7", 7, {0, {{{0, 0}}}}, 0, 0 }, + { "r8", 8, {0, {{{0, 0}}}}, 0, 0 }, + { "r9", 9, {0, {{{0, 0}}}}, 0, 0 }, + { "r10", 10, {0, {{{0, 0}}}}, 0, 0 }, + { "r11", 11, {0, {{{0, 0}}}}, 0, 0 }, + { "r12", 12, {0, {{{0, 0}}}}, 0, 0 }, + { "r13", 13, {0, {{{0, 0}}}}, 0, 0 }, + { "r14", 14, {0, {{{0, 0}}}}, 0, 0 }, + { "r15", 15, {0, {{{0, 0}}}}, 0, 0 }, + { "r16", 16, {0, {{{0, 0}}}}, 0, 0 }, + { "r17", 17, {0, {{{0, 0}}}}, 0, 0 }, + { "r18", 18, {0, {{{0, 0}}}}, 0, 0 }, + { "r19", 19, {0, {{{0, 0}}}}, 0, 0 }, + { "r20", 20, {0, {{{0, 0}}}}, 0, 0 }, + { "r21", 21, {0, {{{0, 0}}}}, 0, 0 }, + { "r22", 22, {0, {{{0, 0}}}}, 0, 0 }, + { "r23", 23, {0, {{{0, 0}}}}, 0, 0 }, + { "r24", 24, {0, {{{0, 0}}}}, 0, 0 }, + { "r25", 25, {0, {{{0, 0}}}}, 0, 0 }, + { "r26", 26, {0, {{{0, 0}}}}, 0, 0 }, + { "r27", 27, {0, {{{0, 0}}}}, 0, 0 }, + { "r28", 28, {0, {{{0, 0}}}}, 0, 0 }, + { "r29", 29, {0, {{{0, 0}}}}, 0, 0 }, + { "r30", 30, {0, {{{0, 0}}}}, 0, 0 }, + { "r31", 31, {0, {{{0, 0}}}}, 0, 0 }, + { "lr", 9, {0, {{{0, 0}}}}, 0, 0 }, + { "sp", 1, {0, {{{0, 0}}}}, 0, 0 }, + { "fp", 2, {0, {{{0, 0}}}}, 0, 0 } +}; + +CGEN_KEYWORD or1k_cgen_opval_h_gpr = +{ + & or1k_cgen_opval_h_gpr_entries[0], + 35, + 0, 0, 0, 0, "" +}; + static CGEN_KEYWORD_ENTRY or1k_cgen_opval_h_fsr_entries[] = { { "r0", 0, {0, {{{0, 0}}}}, 0, 0 }, @@ -226,7 +272,7 @@ CGEN_KEYWORD or1k_cgen_opval_h_fdr = 0, 0, 0, 0, "" }; -static CGEN_KEYWORD_ENTRY or1k_cgen_opval_h_gpr_entries[] = +static CGEN_KEYWORD_ENTRY or1k_cgen_opval_h_fd32r_entries[] = { { "r0", 0, {0, {{{0, 0}}}}, 0, 0 }, { "r1", 1, {0, {{{0, 0}}}}, 0, 0 }, @@ -265,9 +311,55 @@ static CGEN_KEYWORD_ENTRY or1k_cgen_opval_h_gpr_entries[] = { "fp", 2, {0, {{{0, 0}}}}, 0, 0 } }; -CGEN_KEYWORD or1k_cgen_opval_h_gpr = +CGEN_KEYWORD or1k_cgen_opval_h_fd32r = { - & or1k_cgen_opval_h_gpr_entries[0], + & or1k_cgen_opval_h_fd32r_entries[0], + 35, + 0, 0, 0, 0, "" +}; + +static CGEN_KEYWORD_ENTRY or1k_cgen_opval_h_i64r_entries[] = +{ + { "r0", 0, {0, {{{0, 0}}}}, 0, 0 }, + { "r1", 1, {0, {{{0, 0}}}}, 0, 0 }, + { "r2", 2, {0, {{{0, 0}}}}, 0, 0 }, + { "r3", 3, {0, {{{0, 0}}}}, 0, 0 }, + { "r4", 4, {0, {{{0, 0}}}}, 0, 0 }, + { "r5", 5, {0, {{{0, 0}}}}, 0, 0 }, + { "r6", 6, {0, {{{0, 0}}}}, 0, 0 }, + { "r7", 7, {0, {{{0, 0}}}}, 0, 0 }, + { "r8", 8, {0, {{{0, 0}}}}, 0, 0 }, + { "r9", 9, {0, {{{0, 0}}}}, 0, 0 }, + { "r10", 10, {0, {{{0, 0}}}}, 0, 0 }, + { "r11", 11, {0, {{{0, 0}}}}, 0, 0 }, + { "r12", 12, {0, {{{0, 0}}}}, 0, 0 }, + { "r13", 13, {0, {{{0, 0}}}}, 0, 0 }, + { "r14", 14, {0, {{{0, 0}}}}, 0, 0 }, + { "r15", 15, {0, {{{0, 0}}}}, 0, 0 }, + { "r16", 16, {0, {{{0, 0}}}}, 0, 0 }, + { "r17", 17, {0, {{{0, 0}}}}, 0, 0 }, + { "r18", 18, {0, {{{0, 0}}}}, 0, 0 }, + { "r19", 19, {0, {{{0, 0}}}}, 0, 0 }, + { "r20", 20, {0, {{{0, 0}}}}, 0, 0 }, + { "r21", 21, {0, {{{0, 0}}}}, 0, 0 }, + { "r22", 22, {0, {{{0, 0}}}}, 0, 0 }, + { "r23", 23, {0, {{{0, 0}}}}, 0, 0 }, + { "r24", 24, {0, {{{0, 0}}}}, 0, 0 }, + { "r25", 25, {0, {{{0, 0}}}}, 0, 0 }, + { "r26", 26, {0, {{{0, 0}}}}, 0, 0 }, + { "r27", 27, {0, {{{0, 0}}}}, 0, 0 }, + { "r28", 28, {0, {{{0, 0}}}}, 0, 0 }, + { "r29", 29, {0, {{{0, 0}}}}, 0, 0 }, + { "r30", 30, {0, {{{0, 0}}}}, 0, 0 }, + { "r31", 31, {0, {{{0, 0}}}}, 0, 0 }, + { "lr", 9, {0, {{{0, 0}}}}, 0, 0 }, + { "sp", 1, {0, {{{0, 0}}}}, 0, 0 }, + { "fp", 2, {0, {{{0, 0}}}}, 0, 0 } +}; + +CGEN_KEYWORD or1k_cgen_opval_h_i64r = +{ + & or1k_cgen_opval_h_i64r_entries[0], 35, 0, 0, 0, 0, "" }; @@ -285,10 +377,12 @@ const CGEN_HW_ENTRY or1k_cgen_hw_table[] = { "h-addr", HW_H_ADDR, CGEN_ASM_NONE, 0, { 0, { { { (1<f_r2, 0); break; + case OR1K_OPERAND_RAD32F : + print_keyword (cd, info, & or1k_cgen_opval_h_fd32r, fields->f_r2, 0); + break; case OR1K_OPERAND_RADF : - print_keyword (cd, info, & or1k_cgen_opval_h_fdr, fields->f_r1, 0); + print_keyword (cd, info, & or1k_cgen_opval_h_fdr, fields->f_r2, 0); + break; + case OR1K_OPERAND_RADI : + print_keyword (cd, info, & or1k_cgen_opval_h_i64r, fields->f_r2, 0); break; case OR1K_OPERAND_RASF : print_keyword (cd, info, & or1k_cgen_opval_h_fsr, fields->f_r2, 0); @@ -108,8 +114,11 @@ or1k_cgen_print_operand (CGEN_CPU_DESC cd, case OR1K_OPERAND_RB : print_keyword (cd, info, & or1k_cgen_opval_h_gpr, fields->f_r3, 0); break; + case OR1K_OPERAND_RBD32F : + print_keyword (cd, info, & or1k_cgen_opval_h_fd32r, fields->f_r3, 0); + break; case OR1K_OPERAND_RBDF : - print_keyword (cd, info, & or1k_cgen_opval_h_fdr, fields->f_r1, 0); + print_keyword (cd, info, & or1k_cgen_opval_h_fdr, fields->f_r3, 0); break; case OR1K_OPERAND_RBSF : print_keyword (cd, info, & or1k_cgen_opval_h_fsr, fields->f_r3, 0); @@ -117,9 +126,15 @@ or1k_cgen_print_operand (CGEN_CPU_DESC cd, case OR1K_OPERAND_RD : print_keyword (cd, info, & or1k_cgen_opval_h_gpr, fields->f_r1, 0); break; + case OR1K_OPERAND_RDD32F : + print_keyword (cd, info, & or1k_cgen_opval_h_fd32r, fields->f_r1, 0); + break; case OR1K_OPERAND_RDDF : print_keyword (cd, info, & or1k_cgen_opval_h_fdr, fields->f_r1, 0); break; + case OR1K_OPERAND_RDDI : + print_keyword (cd, info, & or1k_cgen_opval_h_i64r, fields->f_r1, 0); + break; case OR1K_OPERAND_RDSF : print_keyword (cd, info, & or1k_cgen_opval_h_fsr, fields->f_r1, 0); break; diff --git a/opcodes/or1k-ibld.c b/opcodes/or1k-ibld.c index 964ec33ee8..f60540e7de 100644 --- a/opcodes/or1k-ibld.c +++ b/opcodes/or1k-ibld.c @@ -590,8 +590,14 @@ or1k_cgen_insert_operand (CGEN_CPU_DESC cd, case OR1K_OPERAND_RA : errmsg = insert_normal (cd, fields->f_r2, 0, 0, 20, 5, 32, total_length, buffer); break; + case OR1K_OPERAND_RAD32F : + errmsg = insert_normal (cd, fields->f_r2, 0, 0, 20, 5, 32, total_length, buffer); + break; case OR1K_OPERAND_RADF : - errmsg = insert_normal (cd, fields->f_r1, 0, 0, 25, 5, 32, total_length, buffer); + errmsg = insert_normal (cd, fields->f_r2, 0, 0, 20, 5, 32, total_length, buffer); + break; + case OR1K_OPERAND_RADI : + errmsg = insert_normal (cd, fields->f_r2, 0, 0, 20, 5, 32, total_length, buffer); break; case OR1K_OPERAND_RASF : errmsg = insert_normal (cd, fields->f_r2, 0, 0, 20, 5, 32, total_length, buffer); @@ -599,8 +605,11 @@ or1k_cgen_insert_operand (CGEN_CPU_DESC cd, case OR1K_OPERAND_RB : errmsg = insert_normal (cd, fields->f_r3, 0, 0, 15, 5, 32, total_length, buffer); break; + case OR1K_OPERAND_RBD32F : + errmsg = insert_normal (cd, fields->f_r3, 0, 0, 15, 5, 32, total_length, buffer); + break; case OR1K_OPERAND_RBDF : - errmsg = insert_normal (cd, fields->f_r1, 0, 0, 25, 5, 32, total_length, buffer); + errmsg = insert_normal (cd, fields->f_r3, 0, 0, 15, 5, 32, total_length, buffer); break; case OR1K_OPERAND_RBSF : errmsg = insert_normal (cd, fields->f_r3, 0, 0, 15, 5, 32, total_length, buffer); @@ -608,9 +617,15 @@ or1k_cgen_insert_operand (CGEN_CPU_DESC cd, case OR1K_OPERAND_RD : errmsg = insert_normal (cd, fields->f_r1, 0, 0, 25, 5, 32, total_length, buffer); break; + case OR1K_OPERAND_RDD32F : + errmsg = insert_normal (cd, fields->f_r1, 0, 0, 25, 5, 32, total_length, buffer); + break; case OR1K_OPERAND_RDDF : errmsg = insert_normal (cd, fields->f_r1, 0, 0, 25, 5, 32, total_length, buffer); break; + case OR1K_OPERAND_RDDI : + errmsg = insert_normal (cd, fields->f_r1, 0, 0, 25, 5, 32, total_length, buffer); + break; case OR1K_OPERAND_RDSF : errmsg = insert_normal (cd, fields->f_r1, 0, 0, 25, 5, 32, total_length, buffer); break; @@ -714,8 +729,14 @@ or1k_cgen_extract_operand (CGEN_CPU_DESC cd, case OR1K_OPERAND_RA : length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 5, 32, total_length, pc, & fields->f_r2); break; + case OR1K_OPERAND_RAD32F : + length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 5, 32, total_length, pc, & fields->f_r2); + break; case OR1K_OPERAND_RADF : - length = extract_normal (cd, ex_info, insn_value, 0, 0, 25, 5, 32, total_length, pc, & fields->f_r1); + length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 5, 32, total_length, pc, & fields->f_r2); + break; + case OR1K_OPERAND_RADI : + length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 5, 32, total_length, pc, & fields->f_r2); break; case OR1K_OPERAND_RASF : length = extract_normal (cd, ex_info, insn_value, 0, 0, 20, 5, 32, total_length, pc, & fields->f_r2); @@ -723,8 +744,11 @@ or1k_cgen_extract_operand (CGEN_CPU_DESC cd, case OR1K_OPERAND_RB : length = extract_normal (cd, ex_info, insn_value, 0, 0, 15, 5, 32, total_length, pc, & fields->f_r3); break; + case OR1K_OPERAND_RBD32F : + length = extract_normal (cd, ex_info, insn_value, 0, 0, 15, 5, 32, total_length, pc, & fields->f_r3); + break; case OR1K_OPERAND_RBDF : - length = extract_normal (cd, ex_info, insn_value, 0, 0, 25, 5, 32, total_length, pc, & fields->f_r1); + length = extract_normal (cd, ex_info, insn_value, 0, 0, 15, 5, 32, total_length, pc, & fields->f_r3); break; case OR1K_OPERAND_RBSF : length = extract_normal (cd, ex_info, insn_value, 0, 0, 15, 5, 32, total_length, pc, & fields->f_r3); @@ -732,9 +756,15 @@ or1k_cgen_extract_operand (CGEN_CPU_DESC cd, case OR1K_OPERAND_RD : length = extract_normal (cd, ex_info, insn_value, 0, 0, 25, 5, 32, total_length, pc, & fields->f_r1); break; + case OR1K_OPERAND_RDD32F : + length = extract_normal (cd, ex_info, insn_value, 0, 0, 25, 5, 32, total_length, pc, & fields->f_r1); + break; case OR1K_OPERAND_RDDF : length = extract_normal (cd, ex_info, insn_value, 0, 0, 25, 5, 32, total_length, pc, & fields->f_r1); break; + case OR1K_OPERAND_RDDI : + length = extract_normal (cd, ex_info, insn_value, 0, 0, 25, 5, 32, total_length, pc, & fields->f_r1); + break; case OR1K_OPERAND_RDSF : length = extract_normal (cd, ex_info, insn_value, 0, 0, 25, 5, 32, total_length, pc, & fields->f_r1); break; @@ -813,8 +843,14 @@ or1k_cgen_get_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case OR1K_OPERAND_RA : value = fields->f_r2; break; + case OR1K_OPERAND_RAD32F : + value = fields->f_r2; + break; case OR1K_OPERAND_RADF : - value = fields->f_r1; + value = fields->f_r2; + break; + case OR1K_OPERAND_RADI : + value = fields->f_r2; break; case OR1K_OPERAND_RASF : value = fields->f_r2; @@ -822,8 +858,11 @@ or1k_cgen_get_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case OR1K_OPERAND_RB : value = fields->f_r3; break; + case OR1K_OPERAND_RBD32F : + value = fields->f_r3; + break; case OR1K_OPERAND_RBDF : - value = fields->f_r1; + value = fields->f_r3; break; case OR1K_OPERAND_RBSF : value = fields->f_r3; @@ -831,9 +870,15 @@ or1k_cgen_get_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case OR1K_OPERAND_RD : value = fields->f_r1; break; + case OR1K_OPERAND_RDD32F : + value = fields->f_r1; + break; case OR1K_OPERAND_RDDF : value = fields->f_r1; break; + case OR1K_OPERAND_RDDI : + value = fields->f_r1; + break; case OR1K_OPERAND_RDSF : value = fields->f_r1; break; @@ -882,8 +927,14 @@ or1k_cgen_get_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case OR1K_OPERAND_RA : value = fields->f_r2; break; + case OR1K_OPERAND_RAD32F : + value = fields->f_r2; + break; case OR1K_OPERAND_RADF : - value = fields->f_r1; + value = fields->f_r2; + break; + case OR1K_OPERAND_RADI : + value = fields->f_r2; break; case OR1K_OPERAND_RASF : value = fields->f_r2; @@ -891,8 +942,11 @@ or1k_cgen_get_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case OR1K_OPERAND_RB : value = fields->f_r3; break; + case OR1K_OPERAND_RBD32F : + value = fields->f_r3; + break; case OR1K_OPERAND_RBDF : - value = fields->f_r1; + value = fields->f_r3; break; case OR1K_OPERAND_RBSF : value = fields->f_r3; @@ -900,9 +954,15 @@ or1k_cgen_get_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case OR1K_OPERAND_RD : value = fields->f_r1; break; + case OR1K_OPERAND_RDD32F : + value = fields->f_r1; + break; case OR1K_OPERAND_RDDF : value = fields->f_r1; break; + case OR1K_OPERAND_RDDI : + value = fields->f_r1; + break; case OR1K_OPERAND_RDSF : value = fields->f_r1; break; @@ -958,8 +1018,14 @@ or1k_cgen_set_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case OR1K_OPERAND_RA : fields->f_r2 = value; break; + case OR1K_OPERAND_RAD32F : + fields->f_r2 = value; + break; case OR1K_OPERAND_RADF : - fields->f_r1 = value; + fields->f_r2 = value; + break; + case OR1K_OPERAND_RADI : + fields->f_r2 = value; break; case OR1K_OPERAND_RASF : fields->f_r2 = value; @@ -967,8 +1033,11 @@ or1k_cgen_set_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case OR1K_OPERAND_RB : fields->f_r3 = value; break; + case OR1K_OPERAND_RBD32F : + fields->f_r3 = value; + break; case OR1K_OPERAND_RBDF : - fields->f_r1 = value; + fields->f_r3 = value; break; case OR1K_OPERAND_RBSF : fields->f_r3 = value; @@ -976,9 +1045,15 @@ or1k_cgen_set_int_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case OR1K_OPERAND_RD : fields->f_r1 = value; break; + case OR1K_OPERAND_RDD32F : + fields->f_r1 = value; + break; case OR1K_OPERAND_RDDF : fields->f_r1 = value; break; + case OR1K_OPERAND_RDDI : + fields->f_r1 = value; + break; case OR1K_OPERAND_RDSF : fields->f_r1 = value; break; @@ -1024,8 +1099,14 @@ or1k_cgen_set_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case OR1K_OPERAND_RA : fields->f_r2 = value; break; + case OR1K_OPERAND_RAD32F : + fields->f_r2 = value; + break; case OR1K_OPERAND_RADF : - fields->f_r1 = value; + fields->f_r2 = value; + break; + case OR1K_OPERAND_RADI : + fields->f_r2 = value; break; case OR1K_OPERAND_RASF : fields->f_r2 = value; @@ -1033,8 +1114,11 @@ or1k_cgen_set_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case OR1K_OPERAND_RB : fields->f_r3 = value; break; + case OR1K_OPERAND_RBD32F : + fields->f_r3 = value; + break; case OR1K_OPERAND_RBDF : - fields->f_r1 = value; + fields->f_r3 = value; break; case OR1K_OPERAND_RBSF : fields->f_r3 = value; @@ -1042,9 +1126,15 @@ or1k_cgen_set_vma_operand (CGEN_CPU_DESC cd ATTRIBUTE_UNUSED, case OR1K_OPERAND_RD : fields->f_r1 = value; break; + case OR1K_OPERAND_RDD32F : + fields->f_r1 = value; + break; case OR1K_OPERAND_RDDF : fields->f_r1 = value; break; + case OR1K_OPERAND_RDDI : + fields->f_r1 = value; + break; case OR1K_OPERAND_RDSF : fields->f_r1 = value; break; diff --git a/opcodes/or1k-opc.c b/opcodes/or1k-opc.c index 36aed256d6..f7b3caec5d 100644 --- a/opcodes/or1k-opc.c +++ b/opcodes/or1k-opc.c @@ -149,31 +149,59 @@ static const CGEN_IFMT ifmt_lf_add_s ATTRIBUTE_UNUSED = { }; static const CGEN_IFMT ifmt_lf_add_d ATTRIBUTE_UNUSED = { - 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R1) }, { F (F_R1) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } + 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_lf_add_d32 ATTRIBUTE_UNUSED = { + 32, 32, 0xfc0007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } }; static const CGEN_IFMT ifmt_lf_itof_s ATTRIBUTE_UNUSED = { 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } }; +static const CGEN_IFMT ifmt_lf_itof_d ATTRIBUTE_UNUSED = { + 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_lf_itof_d32 ATTRIBUTE_UNUSED = { + 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } +}; + static const CGEN_IFMT ifmt_lf_ftoi_s ATTRIBUTE_UNUSED = { 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } }; static const CGEN_IFMT ifmt_lf_ftoi_d ATTRIBUTE_UNUSED = { - 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R1) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } + 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_lf_ftoi_d32 ATTRIBUTE_UNUSED = { + 32, 32, 0xfc00ffff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } }; static const CGEN_IFMT ifmt_lf_eq_s ATTRIBUTE_UNUSED = { 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } }; +static const CGEN_IFMT ifmt_lf_eq_d ATTRIBUTE_UNUSED = { + 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_lf_eq_d32 ATTRIBUTE_UNUSED = { + 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_R1) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } +}; + static const CGEN_IFMT ifmt_lf_cust1_s ATTRIBUTE_UNUSED = { 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } }; static const CGEN_IFMT ifmt_lf_cust1_d ATTRIBUTE_UNUSED = { - 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R1) }, { F (F_R1) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } + 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } +}; + +static const CGEN_IFMT ifmt_lf_cust1_d32 ATTRIBUTE_UNUSED = { + 32, 32, 0xffe007ff, { { F (F_OPCODE) }, { F (F_RESV_25_5) }, { F (F_R2) }, { F (F_R3) }, { F (F_RESV_10_3) }, { F (F_OP_7_8) }, { 0 } } }; #undef F @@ -791,6 +819,12 @@ static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] = { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, & ifmt_lf_add_d, { 0xc8000010 } }, +/* lf.add.d $rDD32F,$rAD32F,$rBD32F */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (RDD32F), ',', OP (RAD32F), ',', OP (RBD32F), 0 } }, + & ifmt_lf_add_d32, { 0xc8000010 } + }, /* lf.sub.s $rDSF,$rASF,$rBSF */ { { 0, 0, 0, 0 }, @@ -803,6 +837,12 @@ static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] = { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, & ifmt_lf_add_d, { 0xc8000011 } }, +/* lf.sub.d $rDD32F,$rAD32F,$rBD32F */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (RDD32F), ',', OP (RAD32F), ',', OP (RBD32F), 0 } }, + & ifmt_lf_add_d32, { 0xc8000011 } + }, /* lf.mul.s $rDSF,$rASF,$rBSF */ { { 0, 0, 0, 0 }, @@ -815,6 +855,12 @@ static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] = { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, & ifmt_lf_add_d, { 0xc8000012 } }, +/* lf.mul.d $rDD32F,$rAD32F,$rBD32F */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (RDD32F), ',', OP (RAD32F), ',', OP (RBD32F), 0 } }, + & ifmt_lf_add_d32, { 0xc8000012 } + }, /* lf.div.s $rDSF,$rASF,$rBSF */ { { 0, 0, 0, 0 }, @@ -827,6 +873,12 @@ static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] = { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, & ifmt_lf_add_d, { 0xc8000013 } }, +/* lf.div.d $rDD32F,$rAD32F,$rBD32F */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (RDD32F), ',', OP (RAD32F), ',', OP (RBD32F), 0 } }, + & ifmt_lf_add_d32, { 0xc8000013 } + }, /* lf.rem.s $rDSF,$rASF,$rBSF */ { { 0, 0, 0, 0 }, @@ -839,17 +891,29 @@ static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] = { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, & ifmt_lf_add_d, { 0xc8000016 } }, +/* lf.rem.d $rDD32F,$rAD32F,$rBD32F */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (RDD32F), ',', OP (RAD32F), ',', OP (RBD32F), 0 } }, + & ifmt_lf_add_d32, { 0xc8000016 } + }, /* lf.itof.s $rDSF,$rA */ { { 0, 0, 0, 0 }, { { MNEM, ' ', OP (RDSF), ',', OP (RA), 0 } }, & ifmt_lf_itof_s, { 0xc8000004 } }, -/* lf.itof.d $rDSF,$rA */ +/* lf.itof.d $rDDF,$rA */ { { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RDSF), ',', OP (RA), 0 } }, - & ifmt_lf_itof_s, { 0xc8000014 } + { { MNEM, ' ', OP (RDDF), ',', OP (RA), 0 } }, + & ifmt_lf_itof_d, { 0xc8000014 } + }, +/* lf.itof.d $rDD32F,$rADI */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (RDD32F), ',', OP (RADI), 0 } }, + & ifmt_lf_itof_d32, { 0xc8000014 } }, /* lf.ftoi.s $rD,$rASF */ { @@ -863,17 +927,29 @@ static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] = { { MNEM, ' ', OP (RD), ',', OP (RADF), 0 } }, & ifmt_lf_ftoi_d, { 0xc8000015 } }, +/* lf.ftoi.d $rDDI,$rAD32F */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (RDDI), ',', OP (RAD32F), 0 } }, + & ifmt_lf_ftoi_d32, { 0xc8000015 } + }, /* lf.sfeq.s $rASF,$rBSF */ { { 0, 0, 0, 0 }, { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_eq_s, { 0xc8000008 } }, -/* lf.sfeq.d $rASF,$rBSF */ +/* lf.sfeq.d $rADF,$rBDF */ { { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, - & ifmt_lf_eq_s, { 0xc8000018 } + { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, + & ifmt_lf_eq_d, { 0xc8000018 } + }, +/* lf.sfeq.d $rAD32F,$rBD32F */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, + & ifmt_lf_eq_d32, { 0xc8000018 } }, /* lf.sfne.s $rASF,$rBSF */ { @@ -881,11 +957,17 @@ static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] = { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_eq_s, { 0xc8000009 } }, -/* lf.sfne.d $rASF,$rBSF */ +/* lf.sfne.d $rADF,$rBDF */ { { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, - & ifmt_lf_eq_s, { 0xc8000019 } + { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, + & ifmt_lf_eq_d, { 0xc8000019 } + }, +/* lf.sfne.d $rAD32F,$rBD32F */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, + & ifmt_lf_eq_d32, { 0xc8000019 } }, /* lf.sfge.s $rASF,$rBSF */ { @@ -893,11 +975,17 @@ static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] = { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_eq_s, { 0xc800000b } }, -/* lf.sfge.d $rASF,$rBSF */ +/* lf.sfge.d $rADF,$rBDF */ { { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, - & ifmt_lf_eq_s, { 0xc800001b } + { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, + & ifmt_lf_eq_d, { 0xc800001b } + }, +/* lf.sfge.d $rAD32F,$rBD32F */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, + & ifmt_lf_eq_d32, { 0xc800001b } }, /* lf.sfgt.s $rASF,$rBSF */ { @@ -905,11 +993,17 @@ static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] = { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_eq_s, { 0xc800000a } }, -/* lf.sfgt.d $rASF,$rBSF */ +/* lf.sfgt.d $rADF,$rBDF */ { { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, - & ifmt_lf_eq_s, { 0xc800001a } + { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, + & ifmt_lf_eq_d, { 0xc800001a } + }, +/* lf.sfgt.d $rAD32F,$rBD32F */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, + & ifmt_lf_eq_d32, { 0xc800001a } }, /* lf.sflt.s $rASF,$rBSF */ { @@ -917,11 +1011,17 @@ static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] = { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_eq_s, { 0xc800000c } }, -/* lf.sflt.d $rASF,$rBSF */ +/* lf.sflt.d $rADF,$rBDF */ { { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, - & ifmt_lf_eq_s, { 0xc800001c } + { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, + & ifmt_lf_eq_d, { 0xc800001c } + }, +/* lf.sflt.d $rAD32F,$rBD32F */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, + & ifmt_lf_eq_d32, { 0xc800001c } }, /* lf.sfle.s $rASF,$rBSF */ { @@ -929,11 +1029,17 @@ static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] = { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, & ifmt_lf_eq_s, { 0xc800000d } }, -/* lf.sfle.d $rASF,$rBSF */ +/* lf.sfle.d $rADF,$rBDF */ { { 0, 0, 0, 0 }, - { { MNEM, ' ', OP (RASF), ',', OP (RBSF), 0 } }, - & ifmt_lf_eq_s, { 0xc800001d } + { { MNEM, ' ', OP (RADF), ',', OP (RBDF), 0 } }, + & ifmt_lf_eq_d, { 0xc800001d } + }, +/* lf.sfle.d $rAD32F,$rBD32F */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (RAD32F), ',', OP (RBD32F), 0 } }, + & ifmt_lf_eq_d32, { 0xc800001d } }, /* lf.madd.s $rDSF,$rASF,$rBSF */ { @@ -947,6 +1053,12 @@ static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] = { { MNEM, ' ', OP (RDDF), ',', OP (RADF), ',', OP (RBDF), 0 } }, & ifmt_lf_add_d, { 0xc8000017 } }, +/* lf.madd.d $rDD32F,$rAD32F,$rBD32F */ + { + { 0, 0, 0, 0 }, + { { MNEM, ' ', OP (RDD32F), ',', OP (RAD32F), ',', OP (RBD32F), 0 } }, + & ifmt_lf_add_d32, { 0xc8000017 } + }, /* lf.cust1.s $rASF,$rBSF */ { { 0, 0, 0, 0 }, @@ -959,6 +1071,12 @@ static const CGEN_OPCODE or1k_cgen_insn_opcode_table[MAX_INSNS] = { { MNEM, 0 } }, & ifmt_lf_cust1_d, { 0xc80000e0 } }, +/* lf.cust1.d */ + { + { 0, 0, 0, 0 }, + { { MNEM, 0 } }, + & ifmt_lf_cust1_d32, { 0xc80000e0 } + }, }; #undef A diff --git a/opcodes/or1k-opc.h b/opcodes/or1k-opc.h index 78ed425332..54fc31fabc 100644 --- a/opcodes/or1k-opc.h +++ b/opcodes/or1k-opc.h @@ -65,21 +65,24 @@ typedef enum cgen_insn_type { , OR1K_INSN_L_MACU, OR1K_INSN_L_MSB, OR1K_INSN_L_MSBU, OR1K_INSN_L_CUST1 , OR1K_INSN_L_CUST2, OR1K_INSN_L_CUST3, OR1K_INSN_L_CUST4, OR1K_INSN_L_CUST5 , OR1K_INSN_L_CUST6, OR1K_INSN_L_CUST7, OR1K_INSN_L_CUST8, OR1K_INSN_LF_ADD_S - , OR1K_INSN_LF_ADD_D, OR1K_INSN_LF_SUB_S, OR1K_INSN_LF_SUB_D, OR1K_INSN_LF_MUL_S - , OR1K_INSN_LF_MUL_D, OR1K_INSN_LF_DIV_S, OR1K_INSN_LF_DIV_D, OR1K_INSN_LF_REM_S - , OR1K_INSN_LF_REM_D, OR1K_INSN_LF_ITOF_S, OR1K_INSN_LF_ITOF_D, OR1K_INSN_LF_FTOI_S - , OR1K_INSN_LF_FTOI_D, OR1K_INSN_LF_EQ_S, OR1K_INSN_LF_EQ_D, OR1K_INSN_LF_NE_S - , OR1K_INSN_LF_NE_D, OR1K_INSN_LF_GE_S, OR1K_INSN_LF_GE_D, OR1K_INSN_LF_GT_S - , OR1K_INSN_LF_GT_D, OR1K_INSN_LF_LT_S, OR1K_INSN_LF_LT_D, OR1K_INSN_LF_LE_S - , OR1K_INSN_LF_LE_D, OR1K_INSN_LF_MADD_S, OR1K_INSN_LF_MADD_D, OR1K_INSN_LF_CUST1_S - , OR1K_INSN_LF_CUST1_D + , OR1K_INSN_LF_ADD_D, OR1K_INSN_LF_ADD_D32, OR1K_INSN_LF_SUB_S, OR1K_INSN_LF_SUB_D + , OR1K_INSN_LF_SUB_D32, OR1K_INSN_LF_MUL_S, OR1K_INSN_LF_MUL_D, OR1K_INSN_LF_MUL_D32 + , OR1K_INSN_LF_DIV_S, OR1K_INSN_LF_DIV_D, OR1K_INSN_LF_DIV_D32, OR1K_INSN_LF_REM_S + , OR1K_INSN_LF_REM_D, OR1K_INSN_LF_REM_D32, OR1K_INSN_LF_ITOF_S, OR1K_INSN_LF_ITOF_D + , OR1K_INSN_LF_ITOF_D32, OR1K_INSN_LF_FTOI_S, OR1K_INSN_LF_FTOI_D, OR1K_INSN_LF_FTOI_D32 + , OR1K_INSN_LF_EQ_S, OR1K_INSN_LF_EQ_D, OR1K_INSN_LF_EQ_D32, OR1K_INSN_LF_NE_S + , OR1K_INSN_LF_NE_D, OR1K_INSN_LF_NE_D32, OR1K_INSN_LF_GE_S, OR1K_INSN_LF_GE_D + , OR1K_INSN_LF_GE_D32, OR1K_INSN_LF_GT_S, OR1K_INSN_LF_GT_D, OR1K_INSN_LF_GT_D32 + , OR1K_INSN_LF_LT_S, OR1K_INSN_LF_LT_D, OR1K_INSN_LF_LT_D32, OR1K_INSN_LF_LE_S + , OR1K_INSN_LF_LE_D, OR1K_INSN_LF_LE_D32, OR1K_INSN_LF_MADD_S, OR1K_INSN_LF_MADD_D + , OR1K_INSN_LF_MADD_D32, OR1K_INSN_LF_CUST1_S, OR1K_INSN_LF_CUST1_D, OR1K_INSN_LF_CUST1_D32 } CGEN_INSN_TYPE; /* Index of `invalid' insn place holder. */ #define CGEN_INSN_INVALID OR1K_INSN_INVALID /* Total number of insns in table. */ -#define MAX_INSNS ((int) OR1K_INSN_LF_CUST1_D + 1) +#define MAX_INSNS ((int) OR1K_INSN_LF_CUST1_D32 + 1) /* This struct records data prior to insertion or after extraction. */ struct cgen_fields diff --git a/opcodes/or1k-opinst.c b/opcodes/or1k-opinst.c index 6b18dab986..ff7593ac74 100644 --- a/opcodes/or1k-opinst.c +++ b/opcodes/or1k-opinst.c @@ -461,6 +461,13 @@ static const CGEN_OPINST sfmt_lf_add_d_ops[] ATTRIBUTE_UNUSED = { { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; +static const CGEN_OPINST sfmt_lf_add_d32_ops[] ATTRIBUTE_UNUSED = { + { INPUT, "rAD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RAD32F), 0, 0 }, + { INPUT, "rBD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RBD32F), 0, 0 }, + { OUTPUT, "rDD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RDD32F), 0, 0 }, + { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } +}; + static const CGEN_OPINST sfmt_lf_itof_s_ops[] ATTRIBUTE_UNUSED = { { INPUT, "rA", HW_H_GPR, CGEN_MODE_UDI, OP_ENT (RA), 0, 0 }, { INPUT, "sys_fpcsr_rm", HW_H_SYS_FPCSR_RM, CGEN_MODE_UDI, 0, 0, 0 }, @@ -475,6 +482,13 @@ static const CGEN_OPINST sfmt_lf_itof_d_ops[] ATTRIBUTE_UNUSED = { { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; +static const CGEN_OPINST sfmt_lf_itof_d32_ops[] ATTRIBUTE_UNUSED = { + { INPUT, "rADI", HW_H_I64R, CGEN_MODE_DI, OP_ENT (RADI), 0, 0 }, + { INPUT, "sys_fpcsr_rm", HW_H_SYS_FPCSR_RM, CGEN_MODE_UDI, 0, 0, 0 }, + { OUTPUT, "rDD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RDD32F), 0, 0 }, + { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } +}; + static const CGEN_OPINST sfmt_lf_ftoi_s_ops[] ATTRIBUTE_UNUSED = { { INPUT, "rASF", HW_H_FSR, CGEN_MODE_SF, OP_ENT (RASF), 0, 0 }, { INPUT, "sys_fpcsr_rm", HW_H_SYS_FPCSR_RM, CGEN_MODE_UDI, 0, 0, 0 }, @@ -489,6 +503,13 @@ static const CGEN_OPINST sfmt_lf_ftoi_d_ops[] ATTRIBUTE_UNUSED = { { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; +static const CGEN_OPINST sfmt_lf_ftoi_d32_ops[] ATTRIBUTE_UNUSED = { + { INPUT, "rAD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RAD32F), 0, 0 }, + { INPUT, "sys_fpcsr_rm", HW_H_SYS_FPCSR_RM, CGEN_MODE_UDI, 0, 0, 0 }, + { OUTPUT, "rDDI", HW_H_I64R, CGEN_MODE_DI, OP_ENT (RDDI), 0, 0 }, + { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } +}; + static const CGEN_OPINST sfmt_lf_eq_s_ops[] ATTRIBUTE_UNUSED = { { INPUT, "rASF", HW_H_FSR, CGEN_MODE_SF, OP_ENT (RASF), 0, 0 }, { INPUT, "rBSF", HW_H_FSR, CGEN_MODE_SF, OP_ENT (RBSF), 0, 0 }, @@ -503,6 +524,13 @@ static const CGEN_OPINST sfmt_lf_eq_d_ops[] ATTRIBUTE_UNUSED = { { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; +static const CGEN_OPINST sfmt_lf_eq_d32_ops[] ATTRIBUTE_UNUSED = { + { INPUT, "rAD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RAD32F), 0, 0 }, + { INPUT, "rBD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RBD32F), 0, 0 }, + { OUTPUT, "sys_sr_f", HW_H_SYS_SR_F, CGEN_MODE_UDI, 0, 0, 0 }, + { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } +}; + static const CGEN_OPINST sfmt_lf_madd_s_ops[] ATTRIBUTE_UNUSED = { { INPUT, "rASF", HW_H_FSR, CGEN_MODE_SF, OP_ENT (RASF), 0, 0 }, { INPUT, "rBSF", HW_H_FSR, CGEN_MODE_SF, OP_ENT (RBSF), 0, 0 }, @@ -519,6 +547,14 @@ static const CGEN_OPINST sfmt_lf_madd_d_ops[] ATTRIBUTE_UNUSED = { { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } }; +static const CGEN_OPINST sfmt_lf_madd_d32_ops[] ATTRIBUTE_UNUSED = { + { INPUT, "rAD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RAD32F), 0, 0 }, + { INPUT, "rBD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RBD32F), 0, 0 }, + { INPUT, "rDD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RDD32F), 0, 0 }, + { OUTPUT, "rDD32F", HW_H_FD32R, CGEN_MODE_DF, OP_ENT (RDD32F), 0, 0 }, + { END, (const char *)0, (enum cgen_hw_type)0, (enum cgen_mode)0, (enum cgen_operand_type)0, 0, 0 } +}; + #undef OP_ENT #undef INPUT #undef OUTPUT @@ -629,32 +665,47 @@ static const CGEN_OPINST *or1k_cgen_opinst_table[MAX_INSNS] = { & sfmt_l_msync_ops[0], & sfmt_lf_add_s_ops[0], & sfmt_lf_add_d_ops[0], + & sfmt_lf_add_d32_ops[0], & sfmt_lf_add_s_ops[0], & sfmt_lf_add_d_ops[0], + & sfmt_lf_add_d32_ops[0], & sfmt_lf_add_s_ops[0], & sfmt_lf_add_d_ops[0], + & sfmt_lf_add_d32_ops[0], & sfmt_lf_add_s_ops[0], & sfmt_lf_add_d_ops[0], + & sfmt_lf_add_d32_ops[0], & sfmt_lf_add_s_ops[0], & sfmt_lf_add_d_ops[0], + & sfmt_lf_add_d32_ops[0], & sfmt_lf_itof_s_ops[0], & sfmt_lf_itof_d_ops[0], + & sfmt_lf_itof_d32_ops[0], & sfmt_lf_ftoi_s_ops[0], & sfmt_lf_ftoi_d_ops[0], + & sfmt_lf_ftoi_d32_ops[0], & sfmt_lf_eq_s_ops[0], & sfmt_lf_eq_d_ops[0], + & sfmt_lf_eq_d32_ops[0], & sfmt_lf_eq_s_ops[0], & sfmt_lf_eq_d_ops[0], + & sfmt_lf_eq_d32_ops[0], & sfmt_lf_eq_s_ops[0], & sfmt_lf_eq_d_ops[0], + & sfmt_lf_eq_d32_ops[0], & sfmt_lf_eq_s_ops[0], & sfmt_lf_eq_d_ops[0], + & sfmt_lf_eq_d32_ops[0], & sfmt_lf_eq_s_ops[0], & sfmt_lf_eq_d_ops[0], + & sfmt_lf_eq_d32_ops[0], & sfmt_lf_eq_s_ops[0], & sfmt_lf_eq_d_ops[0], + & sfmt_lf_eq_d32_ops[0], & sfmt_lf_madd_s_ops[0], & sfmt_lf_madd_d_ops[0], + & sfmt_lf_madd_d32_ops[0], + & sfmt_l_msync_ops[0], & sfmt_l_msync_ops[0], & sfmt_l_msync_ops[0], };