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

hweight_64.S (1866B)


      1/* SPDX-License-Identifier: GPL-2.0-or-later */
      2/*
      3 *
      4 * Copyright (C) IBM Corporation, 2010
      5 *
      6 * Author: Anton Blanchard <anton@au.ibm.com>
      7 */
      8#include <asm/processor.h>
      9#include <asm/ppc_asm.h>
     10#include <asm/export.h>
     11#include <asm/feature-fixups.h>
     12
     13/* Note: This code relies on -mminimal-toc */
     14
     15_GLOBAL(__arch_hweight8)
     16BEGIN_FTR_SECTION
     17	b __sw_hweight8
     18	nop
     19	nop
     20FTR_SECTION_ELSE
     21	PPC_POPCNTB(R3,R3)
     22	clrldi	r3,r3,64-8
     23	blr
     24ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
     25EXPORT_SYMBOL(__arch_hweight8)
     26
     27_GLOBAL(__arch_hweight16)
     28BEGIN_FTR_SECTION
     29	b __sw_hweight16
     30	nop
     31	nop
     32	nop
     33	nop
     34FTR_SECTION_ELSE
     35  BEGIN_FTR_SECTION_NESTED(50)
     36	PPC_POPCNTB(R3,R3)
     37	srdi	r4,r3,8
     38	add	r3,r4,r3
     39	clrldi	r3,r3,64-8
     40	blr
     41  FTR_SECTION_ELSE_NESTED(50)
     42	clrlwi  r3,r3,16
     43	PPC_POPCNTW(R3,R3)
     44	clrldi	r3,r3,64-8
     45	blr
     46  ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 50)
     47ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
     48EXPORT_SYMBOL(__arch_hweight16)
     49
     50_GLOBAL(__arch_hweight32)
     51BEGIN_FTR_SECTION
     52	b __sw_hweight32
     53	nop
     54	nop
     55	nop
     56	nop
     57	nop
     58	nop
     59FTR_SECTION_ELSE
     60  BEGIN_FTR_SECTION_NESTED(51)
     61	PPC_POPCNTB(R3,R3)
     62	srdi	r4,r3,16
     63	add	r3,r4,r3
     64	srdi	r4,r3,8
     65	add	r3,r4,r3
     66	clrldi	r3,r3,64-8
     67	blr
     68  FTR_SECTION_ELSE_NESTED(51)
     69	PPC_POPCNTW(R3,R3)
     70	clrldi	r3,r3,64-8
     71	blr
     72  ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 51)
     73ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
     74EXPORT_SYMBOL(__arch_hweight32)
     75
     76_GLOBAL(__arch_hweight64)
     77BEGIN_FTR_SECTION
     78	b __sw_hweight64
     79	nop
     80	nop
     81	nop
     82	nop
     83	nop
     84	nop
     85	nop
     86	nop
     87FTR_SECTION_ELSE
     88  BEGIN_FTR_SECTION_NESTED(52)
     89	PPC_POPCNTB(R3,R3)
     90	srdi	r4,r3,32
     91	add	r3,r4,r3
     92	srdi	r4,r3,16
     93	add	r3,r4,r3
     94	srdi	r4,r3,8
     95	add	r3,r4,r3
     96	clrldi	r3,r3,64-8
     97	blr
     98  FTR_SECTION_ELSE_NESTED(52)
     99	PPC_POPCNTD(R3,R3)
    100	clrldi	r3,r3,64-8
    101	blr
    102  ALT_FTR_SECTION_END_NESTED_IFCLR(CPU_FTR_POPCNTD, 52)
    103ALT_FTR_SECTION_END_IFCLR(CPU_FTR_POPCNTB)
    104EXPORT_SYMBOL(__arch_hweight64)