diff options
Diffstat (limited to 'arch/powerpc/lib')
| -rw-r--r-- | arch/powerpc/lib/Makefile | 1 | ||||
| -rw-r--r-- | arch/powerpc/lib/alloc.c | 1 | ||||
| -rw-r--r-- | arch/powerpc/lib/sstep.c | 29 | ||||
| -rw-r--r-- | arch/powerpc/lib/xor_vmx.h | 1 | 
4 files changed, 19 insertions, 13 deletions
| diff --git a/arch/powerpc/lib/Makefile b/arch/powerpc/lib/Makefile index 50d5bf954cff..c66c3626a216 100644 --- a/arch/powerpc/lib/Makefile +++ b/arch/powerpc/lib/Makefile @@ -1,3 +1,4 @@ +# SPDX-License-Identifier: GPL-2.0  #  # Makefile for ppc-specific library files..  # diff --git a/arch/powerpc/lib/alloc.c b/arch/powerpc/lib/alloc.c index a58abe4afbd1..06796dec01ea 100644 --- a/arch/powerpc/lib/alloc.c +++ b/arch/powerpc/lib/alloc.c @@ -1,3 +1,4 @@ +// SPDX-License-Identifier: GPL-2.0  #include <linux/types.h>  #include <linux/init.h>  #include <linux/slab.h> diff --git a/arch/powerpc/lib/sstep.c b/arch/powerpc/lib/sstep.c index fb9f58b868e7..f208f560aecd 100644 --- a/arch/powerpc/lib/sstep.c +++ b/arch/powerpc/lib/sstep.c @@ -944,9 +944,9 @@ NOKPROBE_SYMBOL(emulate_dcbz);  		: "r" (addr), "i" (-EFAULT), "0" (err))  static nokprobe_inline void set_cr0(const struct pt_regs *regs, -				    struct instruction_op *op, int rd) +				    struct instruction_op *op)  { -	long val = regs->gpr[rd]; +	long val = op->val;  	op->type |= SETCC;  	op->ccval = (regs->ccr & 0x0fffffff) | ((regs->xer >> 3) & 0x10000000); @@ -1326,7 +1326,7 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,  	case 13:	/* addic. */  		imm = (short) instr;  		add_with_carry(regs, op, rd, regs->gpr[ra], imm, 0); -		set_cr0(regs, op, rd); +		set_cr0(regs, op);  		return 1;  	case 14:	/* addi */ @@ -1397,13 +1397,13 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,  	case 28:	/* andi. */  		op->val = regs->gpr[rd] & (unsigned short) instr; -		set_cr0(regs, op, ra); +		set_cr0(regs, op);  		goto logical_done_nocc;  	case 29:	/* andis. */  		imm = (unsigned short) instr;  		op->val = regs->gpr[rd] & (imm << 16); -		set_cr0(regs, op, ra); +		set_cr0(regs, op);  		goto logical_done_nocc;  #ifdef __powerpc64__ @@ -1513,10 +1513,10 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,  			op->type = COMPUTE + SETCC;  			imm = 0xf0000000UL;  			val = regs->gpr[rd]; -			op->val = regs->ccr; +			op->ccval = regs->ccr;  			for (sh = 0; sh < 8; ++sh) {  				if (instr & (0x80000 >> sh)) -					op->val = (op->val & ~imm) | +					op->ccval = (op->ccval & ~imm) |  						(val & imm);  				imm >>= 4;  			} @@ -1651,8 +1651,9 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,  			goto arith_done;  		case 235:	/* mullw */ -			op->val = (unsigned int) regs->gpr[ra] * -				(unsigned int) regs->gpr[rb]; +			op->val = (long)(int) regs->gpr[ra] * +				(int) regs->gpr[rb]; +  			goto arith_done;  		case 266:	/* add */ @@ -1683,11 +1684,13 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,   * Logical instructions   */  		case 26:	/* cntlzw */ -			op->val = __builtin_clz((unsigned int) regs->gpr[rd]); +			val = (unsigned int) regs->gpr[rd]; +			op->val = ( val ? __builtin_clz(val) : 32 );  			goto logical_done;  #ifdef __powerpc64__  		case 58:	/* cntlzd */ -			op->val = __builtin_clzl(regs->gpr[rd]); +			val = regs->gpr[rd]; +			op->val = ( val ? __builtin_clzl(val) : 64 );  			goto logical_done;  #endif  		case 28:	/* and */ @@ -2526,7 +2529,7 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,   logical_done:  	if (instr & 1) -		set_cr0(regs, op, ra); +		set_cr0(regs, op);   logical_done_nocc:  	op->reg = ra;  	op->type |= SETREG; @@ -2534,7 +2537,7 @@ int analyse_instr(struct instruction_op *op, const struct pt_regs *regs,   arith_done:  	if (instr & 1) -		set_cr0(regs, op, rd); +		set_cr0(regs, op);   compute_done:  	op->reg = rd;  	op->type |= SETREG; diff --git a/arch/powerpc/lib/xor_vmx.h b/arch/powerpc/lib/xor_vmx.h index 4746708451ae..5c2b0839b179 100644 --- a/arch/powerpc/lib/xor_vmx.h +++ b/arch/powerpc/lib/xor_vmx.h @@ -1,3 +1,4 @@ +/* SPDX-License-Identifier: GPL-2.0 */  /*   * Simple interface to link xor_vmx.c and xor_vmx_glue.c   * |