cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

divsi3.S (1671B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (c) 2021, The Linux Foundation. All rights reserved.
      4 */
      5
      6#include <linux/linkage.h>
      7
      8SYM_FUNC_START(__hexagon_divsi3)
      9        {
     10                p0 = cmp.gt(r0,#-1)
     11                p1 = cmp.gt(r1,#-1)
     12                r3:2 = vabsw(r1:0)
     13        }
     14        {
     15                p3 = xor(p0,p1)
     16                r4 = sub(r2,r3)
     17                r6 = cl0(r2)
     18                p0 = cmp.gtu(r3,r2)
     19        }
     20        {
     21                r0 = mux(p3,#-1,#1)
     22                r7 = cl0(r3)
     23                p1 = cmp.gtu(r3,r4)
     24        }
     25        {
     26                r0 = mux(p0,#0,r0)
     27                p0 = or(p0,p1)
     28                if (p0.new) jumpr:nt r31
     29                r6 = sub(r7,r6)
     30        }
     31        {
     32                r7 = r6
     33                r5:4 = combine(#1,r3)
     34                r6 = add(#1,lsr(r6,#1))
     35                p0 = cmp.gtu(r6,#4)
     36        }
     37        {
     38                r5:4 = vaslw(r5:4,r7)
     39                if (!p0) r6 = #3
     40        }
     41        {
     42                loop0(1f,r6)
     43                r7:6 = vlsrw(r5:4,#1)
     44                r1:0 = #0
     45        }
     46        .falign
     471:
     48        {
     49                r5:4 = vlsrw(r5:4,#2)
     50                if (!p0.new) r0 = add(r0,r5)
     51                if (!p0.new) r2 = sub(r2,r4)
     52                p0 = cmp.gtu(r4,r2)
     53        }
     54        {
     55                r7:6 = vlsrw(r7:6,#2)
     56                if (!p0.new) r0 = add(r0,r7)
     57                if (!p0.new) r2 = sub(r2,r6)
     58                p0 = cmp.gtu(r6,r2)
     59        }:endloop0
     60        {
     61                if (!p0) r0 = add(r0,r7)
     62        }
     63        {
     64                if (p3) r0 = sub(r1,r0)
     65                jumpr r31
     66        }
     67SYM_FUNC_END(__hexagon_divsi3)