mirror of
				https://gitlab.com/freepascal.org/fpc/source.git
				synced 2025-10-31 06:11:29 +01:00 
			
		
		
		
	* fsqrt is an optional instruction in the ppc architecture and isn't
implemented by any current ppc afaik, so use the generic sqrt routine
    instead (adapted so it works with compilerproc)
			
			
This commit is contained in:
		
							parent
							
								
									ee71991a7f
								
							
						
					
					
						commit
						df5e0bbfc6
					
				| @ -37,10 +37,8 @@ interface | |||||||
|           } |           } | ||||||
|           function first_abs_real: tnode; override; |           function first_abs_real: tnode; override; | ||||||
|           function first_sqr_real: tnode; override; |           function first_sqr_real: tnode; override; | ||||||
|           function first_sqrt_real: tnode; override; |  | ||||||
|           procedure second_abs_real; override; |           procedure second_abs_real; override; | ||||||
|           procedure second_sqr_real; override; |           procedure second_sqr_real; override; | ||||||
|           procedure second_sqrt_real; override; |  | ||||||
|        private |        private | ||||||
|           procedure load_fpu_location; |           procedure load_fpu_location; | ||||||
|        end; |        end; | ||||||
| @ -84,18 +82,6 @@ implementation | |||||||
|         first_sqr_real := nil; |         first_sqr_real := nil; | ||||||
|       end; |       end; | ||||||
| 
 | 
 | ||||||
|      function tppcinlinenode.first_sqrt_real : tnode; |  | ||||||
|       begin |  | ||||||
|         expectloc:=LOC_FPUREGISTER; |  | ||||||
|         registers32:=left.registers32; |  | ||||||
|         registersfpu:=max(left.registersfpu,1); |  | ||||||
| {$ifdef SUPPORT_MMX} |  | ||||||
|         registersmmx:=left.registersmmx; |  | ||||||
| {$endif SUPPORT_MMX} |  | ||||||
|         first_sqrt_real := nil; |  | ||||||
|       end; |  | ||||||
| 
 |  | ||||||
| 
 |  | ||||||
|        { load the FPU into the an fpu register } |        { load the FPU into the an fpu register } | ||||||
|        procedure tppcinlinenode.load_fpu_location; |        procedure tppcinlinenode.load_fpu_location; | ||||||
|          begin |          begin | ||||||
| @ -140,20 +126,17 @@ implementation | |||||||
|            left.location.register,left.location.register)); |            left.location.register,left.location.register)); | ||||||
|        end; |        end; | ||||||
| 
 | 
 | ||||||
|      procedure tppcinlinenode.second_sqrt_real; |  | ||||||
|        begin |  | ||||||
|          location.loc:=LOC_FPUREGISTER; |  | ||||||
|          load_fpu_location; |  | ||||||
|          exprasmlist.concat(taicpu.op_reg_reg(A_FSQRT,location.register, |  | ||||||
|            left.location.register)); |  | ||||||
|        end; |  | ||||||
| 
 |  | ||||||
| begin | begin | ||||||
|    cinlinenode:=tppcinlinenode; |    cinlinenode:=tppcinlinenode; | ||||||
| end. | end. | ||||||
| { | { | ||||||
|   $Log$ |   $Log$ | ||||||
|   Revision 1.5  2003-04-23 12:35:35  florian |   Revision 1.6  2003-05-24 13:39:32  jonas | ||||||
|  |     * fsqrt is an optional instruction in the ppc architecture and isn't | ||||||
|  |       implemented by any current ppc afaik, so use the generic sqrt routine | ||||||
|  |       instead (adapted so it works with compilerproc) | ||||||
|  | 
 | ||||||
|  |   Revision 1.5  2003/04/23 12:35:35  florian | ||||||
|     * fixed several issues with powerpc |     * fixed several issues with powerpc | ||||||
|     + applied a patch from Jonas for nested function calls (PowerPC only) |     + applied a patch from Jonas for nested function calls (PowerPC only) | ||||||
|     * ... |     * ... | ||||||
|  | |||||||
| @ -455,7 +455,7 @@ Function float32_to_int32_round_to_zero( a: Float32 ): longint; | |||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| {$ifndef FPC_SYSTEM_HAS_SQRT} | {$ifndef FPC_SYSTEM_HAS_SQRT} | ||||||
|     function sqrt(d:Real):Real;[internconst:in_const_sqrt]; |     function sqrt(d:Real):Real;[internconst:in_const_sqrt]; [public, alias: 'FPC_SQRT_REAL']; | ||||||
|     {*****************************************************************} |     {*****************************************************************} | ||||||
|     { Square root                                                     } |     { Square root                                                     } | ||||||
|     {*****************************************************************} |     {*****************************************************************} | ||||||
| @ -511,6 +511,11 @@ Function float32_to_int32_round_to_zero( a: Float32 ): longint; | |||||||
|           sqrt := d; |           sqrt := d; | ||||||
|        end; |        end; | ||||||
|     end; |     end; | ||||||
|  | 
 | ||||||
|  | {$ifdef hascompilerproc} | ||||||
|  |     function fpc_sqrt_real(d:Real):Real;compilerproc; external name 'FPC_SQRT_REAL'; | ||||||
|  | {$endif hascompilerproc} | ||||||
|  | 
 | ||||||
| {$endif} | {$endif} | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -1083,7 +1088,12 @@ Function float32_to_int32_round_to_zero( a: Float32 ): longint; | |||||||
| 
 | 
 | ||||||
| { | { | ||||||
|   $Log$ |   $Log$ | ||||||
|   Revision 1.13  2003-05-23 22:58:31  jonas |   Revision 1.14  2003-05-24 13:39:32  jonas | ||||||
|  |     * fsqrt is an optional instruction in the ppc architecture and isn't | ||||||
|  |       implemented by any current ppc afaik, so use the generic sqrt routine | ||||||
|  |       instead (adapted so it works with compilerproc) | ||||||
|  | 
 | ||||||
|  |   Revision 1.13  2003/05/23 22:58:31  jonas | ||||||
|     * added longint typecase to odd(smallint_var) call to avoid overload |     * added longint typecase to odd(smallint_var) call to avoid overload | ||||||
|       problem |       problem | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -35,9 +35,6 @@ const | |||||||
|     {$define FPC_SYSTEM_HAS_SQR} |     {$define FPC_SYSTEM_HAS_SQR} | ||||||
|     function sqr(d : extended) : extended;[internproc:in_sqr_extended]; |     function sqr(d : extended) : extended;[internproc:in_sqr_extended]; | ||||||
| 
 | 
 | ||||||
|     {$define FPC_SYSTEM_HAS_SQRT} |  | ||||||
|     function sqrt(d : extended) : extended;[internproc:in_sqrt_extended]; |  | ||||||
| 
 |  | ||||||
|     { |     { | ||||||
|     function arctan(d : extended) : extended;[internconst:in_arctan_extended]; |     function arctan(d : extended) : extended;[internconst:in_arctan_extended]; | ||||||
|       begin |       begin | ||||||
| @ -427,7 +424,12 @@ end ['R0','R3','F0','F1','F2','F3']; | |||||||
| 
 | 
 | ||||||
| { | { | ||||||
|   $Log$ |   $Log$ | ||||||
|   Revision 1.22  2003-05-16 16:04:33  jonas |   Revision 1.23  2003-05-24 13:39:32  jonas | ||||||
|  |     * fsqrt is an optional instruction in the ppc architecture and isn't | ||||||
|  |       implemented by any current ppc afaik, so use the generic sqrt routine | ||||||
|  |       instead (adapted so it works with compilerproc) | ||||||
|  | 
 | ||||||
|  |   Revision 1.22  2003/05/16 16:04:33  jonas | ||||||
|     * fixed round() (almost the same as trunc) |     * fixed round() (almost the same as trunc) | ||||||
| 
 | 
 | ||||||
|   Revision 1.21  2003/05/11 18:09:45  jonas |   Revision 1.21  2003/05/11 18:09:45  jonas | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Jonas Maebe
						Jonas Maebe