Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/arch/loongarch/include/asm/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 2 kB image not shown  

Quelle  alternative-asm.h   Sprache: C

 
/* SPDX-License-Identifier: GPL-2.0 */
#ifndef _ASM_ALTERNATIVE_ASM_H
#define _ASM_ALTERNATIVE_ASM_H

#ifdef __ASSEMBLER__

#include <asm/asm.h>

/*
 * Issue one struct alt_instr descriptor entry (need to put it into
 * the section .altinstructions, see below). This entry contains
 * enough information for the alternatives patching code to patch an
 * instruction. See apply_alternatives().
 */

.macro altinstruction_entry orig alt feature orig_len alt_len
 .long \orig - .
 .long \alt - .
 .short \feature
 .byte \orig_len
 .byte \alt_len
.endm

/*
 * Define an alternative between two instructions. If @feature is
 * present, early code in apply_alternatives() replaces @oldinstr with
 * @newinstr. ".fill" directive takes care of proper instruction padding
 * in case @newinstr is longer than @oldinstr.
 */

.macro ALTERNATIVE oldinstr, newinstr, feature
140 :
 \oldinstr
141 :
 .fill - (((144f-143f)-(141b-140b)) > 0) * ((144f-143f)-(141b-140b)) / 4, 4, 0x03400000
142 :

 .pushsection .altinstructions, "a"
 altinstruction_entry 140b, 143f, \feature, 142b-140b, 144f-143f
 .popsection

 .subsection 1
143 :
 \newinstr
144 :
 .previous
.endm

#define old_len   (141b-140b)
#define new_len1  (144f-143f)
#define new_len2  (145f-144f)

#define alt_max_short(a, b) ((a) ^ (((a) ^ (b)) & -(-((a) < (b)))))

/*
 * Same as ALTERNATIVE macro above but for two alternatives. If CPU
 * has @feature1, it replaces @oldinstr with @newinstr1. If CPU has
 * @feature2, it replaces @oldinstr with @feature2.
 */

.macro ALTERNATIVE_2 oldinstr, newinstr1, feature1, newinstr2, feature2
140 :
 \oldinstr
141 :
 .fill - ((alt_max_short(new_len1, new_len2) - (old_len)) > 0) * \
  (alt_max_short(new_len1, new_len2) - (old_len)) / 4, 4, 0x03400000
142 :

 .pushsection .altinstructions, "a"
 altinstruction_entry 140b, 143f, \feature1, 142b-140b, 144f-143f, 142b-141b
 altinstruction_entry 140b, 144f, \feature2, 142b-140b, 145f-144f, 142b-141b
 .popsection

 .subsection 1
143 :
 \newinstr1
144 :
 \newinstr2
145 :
 .previous
.endm

#endif  /*  __ASSEMBLER__  */

#endif /* _ASM_ALTERNATIVE_ASM_H */

Messung V0.5
C=92 H=93 G=92

¤ Dauer der Verarbeitung: 0.11 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.