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

Quelle  copy_user_template.S   Sprache: Sparc

 
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2010-2011, The Linux Foundation. All rights reserved.
 */


/* Numerology:
 * WXYZ
 * W: width in bytes
 * X: Load=0, Store=1
 * Y: Location 0=preamble,8=loop,9=epilog
 * Z: Location=0,handler=9
 */

 .text
 .global FUNCNAME
 .type FUNCNAME, @function
 .p2align 5
FUNCNAME:
 {
  p0 = cmp.gtu(bytes,#0)
  if (!p0.new) jump:nt .Ldone
  r3 = or(dst,src)
  r4 = xor(dst,src)
 }
 {
  p1 = cmp.gtu(bytes,#15)
  p0 = bitsclr(r3,#7)
  if (!p0.new) jump:nt .Loop_not_aligned_8
  src_dst_sav = combine(src,dst)
 }

 {
  loopcount = lsr(bytes,#3)
  if (!p1) jump .Lsmall
 }
 p3=sp1loop0(.Loop8,loopcount)
.Loop8:
8080:
8180:
 {
  if (p3) memd(dst++#8) = d_dbuf
  d_dbuf = memd(src++#8)
 }:endloop0
8190:
 {
  memd(dst++#8) = d_dbuf
  bytes -= asl(loopcount,#3)
  jump .Lsmall
 }

.Loop_not_aligned_8:
 {
  p0 = bitsclr(r4,#7)
  if (p0.new) jump:nt .Lalign
 }
 {
  p0 = bitsclr(r3,#3)
  if (!p0.new) jump:nt .Loop_not_aligned_4
  p1 = cmp.gtu(bytes,#7)
 }

 {
  if (!p1) jump .Lsmall
  loopcount = lsr(bytes,#2)
 }
 p3=sp1loop0(.Loop4,loopcount)
.Loop4:
4080:
4180:
 {
  if (p3) memw(dst++#4) = w_dbuf
  w_dbuf = memw(src++#4)
 }:endloop0
4190:
 {
  memw(dst++#4) = w_dbuf
  bytes -= asl(loopcount,#2)
  jump .Lsmall
 }

.Loop_not_aligned_4:
 {
  p0 = bitsclr(r3,#1)
  if (!p0.new) jump:nt .Loop_not_aligned
  p1 = cmp.gtu(bytes,#3)
 }

 {
  if (!p1) jump .Lsmall
  loopcount = lsr(bytes,#1)
 }
 p3=sp1loop0(.Loop2,loopcount)
.Loop2:
2080:
2180:
 {
  if (p3) memh(dst++#2) = w_dbuf
  w_dbuf = memuh(src++#2)
 }:endloop0
2190:
 {
  memh(dst++#2) = w_dbuf
  bytes -= asl(loopcount,#1)
  jump .Lsmall
 }

.Loop_not_aligned: /* Works for as small as one byte */
 p3=sp1loop0(.Loop1,bytes)
.Loop1:
1080:
1180:
 {
  if (p3) memb(dst++#1) = w_dbuf
  w_dbuf = memub(src++#1)
 }:endloop0
 /* Done */
1190:
 {
  memb(dst) = w_dbuf
  jumpr r31
  r0 = #0
 }

.Lsmall:
 {
  p0 = cmp.gtu(bytes,#0)
  if (p0.new) jump:nt .Loop_not_aligned
 }
.Ldone:
 {
  r0 = #0
  jumpr r31
 }
 .falign
.Lalign:
1000:
 {
  if (p0.new) w_dbuf = memub(src)
  p0 = tstbit(src,#0)
  if (!p1) jump .Lsmall
 }
1100:
 {
  if (p0) memb(dst++#1) = w_dbuf
  if (p0) bytes = add(bytes,#-1)
  if (p0) src = add(src,#1)
 }
2000:
 {
  if (p0.new) w_dbuf = memuh(src)
  p0 = tstbit(src,#1)
  if (!p1) jump .Lsmall
 }
2100:
 {
  if (p0) memh(dst++#2) = w_dbuf
  if (p0) bytes = add(bytes,#-2)
  if (p0) src = add(src,#2)
 }
4000:
 {
  if (p0.new) w_dbuf = memw(src)
  p0 = tstbit(src,#2)
  if (!p1) jump .Lsmall
 }
4100:
 {
  if (p0) memw(dst++#4) = w_dbuf
  if (p0) bytes = add(bytes,#-4)
  if (p0) src = add(src,#4)
  jump FUNCNAME
 }
 .size FUNCNAME,.-FUNCNAME

Messung V0.5
C=97 H=95 G=95

¤ Dauer der Verarbeitung: 0.3 Sekunden  ¤

*© 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.