summaryrefslogblamecommitdiff
path: root/areals.s
blob: 610c6e1dd06a3ab4be49c0911585e37bcfba9c19 (plain) (tree)
1
2
3
4
5
6
7
8
9
7084
7085
7086
7087
7088
7089
7090
7091
7092
7093
7094
7095
7096
7097
7098
7099
7100
7101
7102
7103
7104
7105
7106
7107
7108
7109
7110
7111
7112
7113
7114
7115
7116
7117
7118
7119
7120
7121
7122
7123
7124
7125
7126
7127
7128
7129
7130
7131
7132
7133
7134
7135
7136
7137
7138
7139
7140
7141
7142
7143
7144
7145
7146
7147
7148
7149
7150
7151
7152
7153
7154
7155
7156
7157
7158
7159
7160
7161
7162
7163
7164
7165
7166
7167
7168
7169
7170
7171
7172
7173
7174
7175
7176
7177
7178
7179
7180
7181
7182
7183
7184
7185
7186
7187
7188
7189
7190
7191
7192
7193
7194
7195
7196
7197
7198
7199
7200
7201
7202
7203
7204
7205
7206
7207
7208
7209
7210
7211
7212
7213
7214
7215
7216
7217
7218
7219
7220
7221
7222
7223
7224
7225
7226
7227
7228
7229
7230
7231
7232
7233
7234
7235
7236
7237
7238
7239
7240
7241
7242
7243
7244
7245
7246
7247
7248
7249
7250
7251
7252
7253
7254
7255
7256
7257
7258
7259
7260
7261
7262
7263
7264
7265
7266
7267
7268
7269
7270
7271
7272
7273
7274
7275
7276
7277
7278
7279
7280
7281
7282
7283
7284
7285
7286
7287
7288
7289
7290
7291
7292
7293
7294
7295
7296
7297
7298
7299
7300
7301
7302
7303
7304
7305
7306
7307
7308
7309
7310
7311
7312
7313
7314
7315
7316
7317
7318
7319
7320
7321
7322
7323
7324
7325
7326
7327
7328
7329
7330
7331
7332
7333
7334
7335
7336
7337
7338
7339
7340
7341
7342
7343
7344
7345
7346
7347
7348
7349
7350
7351
7352
7353
7354
7355
7356
7357
7358
7359
7360
7361
7362
7363
7364
7365
7366
7367
7368
7369
7370
7371
7372
7373
7374
7375
7376
7377
7378
7379
7380
7381
7382
7383
7384
7385
7386
7387
7388
7389
7390
7391
7392
7393
7394
7395
7396
7397
7398
7399
7400
7401
7402
7403
7404
7405
7406
7407
7408
7409
7410
7411
7412
7413
7414
7415
7416
7417
7418
7419
7420
7421
7422
7423
7424
7425
7426
7427
7428
7429
7430
7431
7432
7433
7434
7435
7436
7437
7438
7439
7440
7441
7442
7443
7444
7445
7446
7447
7448
7449
7450
7451
7452
7453
7454
7455
7456
7457
7458
7459
7460
7461
7462
7463
7464
7465
7466
7467
7468
7469
7470
7471
7472
7473
7474
7475
7476
7477
7478
7479
7480
7481
7482
7483
7484
7485
7486
7487
7488
7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
8029
8030
8031
8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108
8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158
8159
8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
8300
8301
8302
8303
8304
8305
8306
8307
8308
8309
8310
8311
8312
8313
8314
8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340
8341
8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358
8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401
8402
8403
8404
8405
8406
8407
8408
8409
8410
8411
8412
8413
8414
8415
8416
8417
8418
8419
8420
8421
8422
8423
8424
8425
8426
8427
8428
8429
8430
8431
8432
8433
8434
8435
8436
8437
8438
8439
8440
8441
8442
8443
8444
8445
8446
8447
8448
8449
8450
8451
8452
8453
8454
8455
8456
8457
8458
8459
8460
8461
8462
8463
8464
8465
8466
8467
8468
8469
8470
8471
8472
8473
8474
8475
8476
8477
8478
8479
8480
8481
8482
8483
8484
8485
8486
8487
8488
8489
8490
8491
8492
8493
8494
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504
8505
8506
8507
8508
8509
8510
8511
8512
8513
8514
8515
8516
8517
8518
8519
8520
8521
8522
8523
8524
8525
8526
8527
8528
8529
8530
8531
8532
8533
8534
8535
8536
8537
8538
8539
8540
8541
8542
8543
8544
8545
8546
8547
8548
8549
8550
8551
8552
8553
8554
8555
8556
8557
8558
8559
8560
8561
8562
8563
8564
8565
8566
8567
8568
8569
8570
8571
8572
8573
8574
8575
8576
8577
8578
8579
8580
8581
8582
8583
8584
8585
8586
8587
8588
8589
8590
8591
8592
8593
8594
8595
8596
8597
8598
8599
8600
8601
8602
8603
8604
8605
8606
8607
8608
8609
8610
8611
8612
8613
8614
8615
8616
8617
8618
8619
8620
8621
8622
8623
8624
8625
8626
8627
8628
8629
8630
8631
8632
8633
8634
8635
8636
8637
8638
8639
8640
8641
8642
8643
8644
8645
8646
8647
8648
8649
8650
8651
8652
8653
8654
8655
8656
8657
8658
8659
8660
8661
8662
8663
8664
8665
8666
8667
8668
8669
8670
8671
8672
8673
8674
8675
8676
8677
8678
8679
8680
8681
8682
8683
8684
8685
8686
8687
8688
8689
8690
8691
8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702
8703
8704
8705
8706
8707
8708
8709
8710
8711
8712
8713
8714
8715
8716
8717
8718
8719
8720
8721
8722
8723
8724
8725
8726
8727
8728
8729
8730
8731
8732
8733
8734
8735
8736
8737
8738
8739
8740
8741
8742
8743
8744
8745
8746
8747
8748
8749
8750
8751
8752
8753
8754
8755
8756
8757
8758
8759
8760
8761
8762
8763
8764
8765
8766
8767
8768
8769
8770
8771
8772
8773
8774
8775
8776
8777
8778
8779
8780
8781
8782
8783
8784
8785
8786
8787
8788
8789
8790
8791
8792
8793
8794
8795
8796
8797
8798
8799
8800
8801
8802
8803
8804
8805
8806
8807
8808
8809
8810
8811
8812
8813
8814
8815
8816
8817
8818
8819
8820
8821
8822
8823
8824
8825
8826
8827
8828
8829
8830
8831
8832
8833
8834
8835
8836
8837
8838
8839
8840
8841
8842
8843
8844
8845
8846
8847
8848
8849
8850
8851
8852
8853
8854
8855
8856
8857
8858
8859
8860
8861
8862
8863
8864
8865
8866
8867
8868
8869
8870
8871
8872
8873
8874
8875
8876
8877
8878
8879
8880
8881
8882
8883
8884
8885
8886
8887
8888
8889
8890
8891
8892
8893
8894
8895
8896
8897
8898
8899
8900
8901
8902
8903
8904
8905
8906
8907
8908
8909
8910
8911
8912
8913
8914
8915
8916
8917
8918
8919
8920
8921
8922
8923
8924
8925
8926
8927
8928
8929
8930
8931
8932
8933
8934
8935
8936
8937
8938
8939
8940
8941
8942
8943
8944
8945
8946
8947
8948
8949
8950
8951
8952
8953
8954
8955
8956
8957
8958






                              
                                               
                                                                                       
                                                 
                                  
                                                 
                                  
                                                 
                                  
                                                 
                                  
                                                    
                                  
                                               


                                                                  

                                                     










                                   
                                               

                                                                
                                                
        
                                                          



                         
                                                

                                                                               

                                                     
 
                                                            
                         
                                                                   



































                                      
                                                   
                                    
                                                   
                                    
                                                   
                                    
                                                   
                                    
                                                      
                                    
                                                 


                                                                                

                                                     










                                     
                                               

                                                                
                                                  
 
                                                          



                         
                                                

                                                                               

                                                     
 
                                                            
                         
                                                                   



















                                    
                                                 
                                                                                 
                                                               
                                      
                                                                 


                                                           
                                            


                                                                         
                                           









                                                             
                                           











                                                             
                                                     






























                                                                               
                                                                  


                         
                                         




                                    
                                                                


                         
                                         




































                                                               
                                                





































                                                                                                   
                                                  

                                  
                                                

                                  
                                                    

                                  
                                                    
           
                                                               


                                        
                                                                 







                                                            
                                           












                                                             
                                           













                                                                
                                                     

                                                           
                                                          




































                                                                               
                                                                  





                                                            
                                         



                                         
                                                                





                                                            
                                         


















                                                               
                                                         

























                                                                           
                                                






































                                                                                                   
                                              


                                  
                                                      


                                  
                                                


                                  
                                                  

                         
                                                               


                                        
                                                                 







                                                            
                                           












                                                             
                                           













                                                             
                                                     

                                                           
                                             






































                                                                               
                                                                
 
                                                                  

                                                            
                                         





                                         
                                                                  
 
                                                                

                                                            
                                         






















                                                               
                                               
                                                                               
                                                 
                                  
                                                 
                                  
                                                 
                                  
                                                 
                                  
                                                    
                                  
                                               


                                                                  

                                                     










                                   
                                               

                                                                
                                                          
        
                                                


                         
                                                

                                                                               

                                                     
 
                                                            
                         
                                                                   


































                                      
                                                   
                                    
                                                   
                                    
                                                   
                                    
                                                   
                                    
                                                      
                                    
                                                 


                                                                                

                                                     










                                     
                                               

                                                                
                                                  
 
                                                          



                         
                                                

                                                                               

                                                     
 
                                                            
                         
                                                                   

























                                        
                                                 



                                                                               
                                                





                                                                
                                             





                                                            
                                           








                                                             


                                                        





                                                                           
                                             

                                                                     
                                                            






                                                                               
                                                                             



















                                                                               
                                                  

                                  
                                                

                                  
                                                      

                                  
                                                  








                                                            
                                                







                                                                
                                             





                                                            
                                           










                                                             


                                                        





                                                                           
                                             

                                                                     
                                                            






                                                                               
                                                                             























                                                                               
                                                    

                                  
                                                

                                  
                                                    

                                  
                                              








                                                            
                                                







                                                                
                                             





                                                            
                                           










                                                             


                                                        





                                                                           
                                               

                                                                     
                                                            






                                                                               
                                                                             



























                                                                                
                                                
                                                                                
                                             
                                  
                                                   
                                  
                                                  
                                  
                                                    
                                  
                                                   
                                  
                                                    
                                  
                                               



                                                                  

                                                     







                                 
                                               

                                                                
                                                          
        
                                                


                         
                                                

                                                                               

                                                     
 
                                                            












                                    
                                              
                                     
                                                
                                   
                                                
                                      
                                                


                                        
                                              
                                      
                                              






                                        
                                                      
                                     
                                                      
                                   
                                                      
                                      
                                                      


                                      
                                                      
                                      
                                                      


                                        
                                               
                                    
                                                     
                                    
                                                    
                                    
                                                      
                                    
                                                     
                                    
                                                      
                                    
                                                 




                                                                                
                                               

                                                                
                                                          
        
                                                  

                                     
                                              
                                    
                                              




                                                            
                                           


                                                            
                                           







                                                            
                                                    
        
                                                    









                                                                     
                                                          
 
                                                                










                                                             
                                                
                                        
                                                 


                                                             
                                                                

                                                  
                                                 


                                                             
                                                                       

                                                  
                                              
                                      
                                                 


                                                             
                                                                

                                                  
                                                   


                                                             
                                                                       







                                                             
                                            


                                                            
                                            



                                                            
                                            



                                                            
                                                    
                                                            
                                                    















                                                                               
                                                                
























                                                                                                                        
                                                

                                      
                                               


                                                            
                                                            
 

                                                                         

                                     
                                               


                                                            


                                                                         



                                                            
                                            


                                                            
                                            



                                                            
                                            



                                                            
                                                    
                                                            
                                                    









                                                                     
                                                                



















                                                                                      
                                                    
 
                                                      

                                          
                                                     
                                        
                                                     


                                          
                                                  
 
                                                    

                                        
                                                   
                                      
                                                   


                                        
                                               
                                      
                                                    
 
                                                    
                                        
                                                    



                                          
                                             
                                    
                                                  
 
                                                  
                                      
                                                  




                                                             
                                                




















                                                                         
                                            







                                                             
                                             




                                                            
                                             




                                                               
                                            


                                                                
                                                          
                                                            
                                                    

                                                                       
                                                    






                                                                           
                                                





                                                                     
                                                
                                       
                                                  


                                                                   
                                            




                                                                       
                                                          











                                                                                
                                                







                                                                                                       
                                                








































































                                                                                                                   
                                               
                                      
                                                 
 
                                            


                                                             
                                                                   

                                                  
                                             
                                    
                                                 
 
                                          


                                                             
                                                                   

                                                  
                                                 


                                                             
                                                            
                                                             

                                                           

                                     
                                                 


                                                             
                                                            
                                                             

                                                             



                                                            
                                                     
 
                                            


                                                            
                                            



                                                            
                                            



                                                            
                                                    
                                                            
                                                    





                                                                  
                                                       





                                                                     
                                                                

















                                                                                     
                                                        






                                                                        
                                                     



                                      
                                                    



                                      
                                                    



                                      
                                                  


                                      

                                                           



                                                                              
                                               






                                                                          
                                                                                               
 
                                                                    

                                       
                                                   



                                      
                                                  


                                      

                                                           



                                                                              
                                               






                                                                          
                                                                                                
 
                                                                    
                
                                            


                                                            
                                            



                                                            
                                            



                                                            
                                                    
                                                            
                                                    





                                                                  
                                            






                                                                     
                                                                






















                                                                                     

                                                             



                                                                                   
                                               






                                                                          
                                                                                                              
 
                                                                              

                                       

                                                             



                                                                                   
                                               






                                                                          
                                                                                                               
 
                                                                                
                
                                            


                                                            
                                            



                                                            
                                            



                                                            
                                                    
                                                            
                                                    





                                                                  
                                            






                                                                     
                                                                
























                                                                                        
                                                   

                                                                       
                                                    

                                                                   
                                                                          
 
                                                        




                                       

                                                   





                                                                       
                                                                         
 
                                                          

                                       

                                                      
                                            
                                                      
                                    
                                                      



                                            

                                                    
                                        
                                                    
                                    
                                                    



                                          

                                                     
                                            
                                                     
                                    
                                                     



                                            

                                                   
                                        
                                                   
                                    
                                                   












                                          
                                                

















                                                                         
                                           




                                                             
                                           







                                                            
                                                    
        
                                                    









                                                                     
                                                          
 
                                                                




























                                                                
                                                 

                                                                        
                                                 
                                                                  
                                                        

                                                                          
                                                           


                                       
                                                 

                                                                        
                                                 
                                                                  
                                                        

                                                                           
                                                             



                                                            
                                            


                                                            
                                            



                                                            
                                            



                                                            
                                                    
                                                            
                                                    









                                                                     
                                                                





















                                                                                                                      
                                                      



                                        
                                                    



                                        
                                                     



                                        
                                                   


                                      

                                                   



                                                                               
                                             






                                                                           
                                                                                                                    
 

                                                                     

                                                 
                                                      



                                        
                                                    



                                        
                                                     



                                        
                                                   


                                      

                                                   



                                                                                
                                             






                                                                           
                                                                                                                     
 

                                                                       
                          
                                            


                                                            
                                            



                                                            
                                            



                                                            
                                                    
                                                            
                                                    













                                                                        
                                                                






















                                                                                                 

                                                 



                                                                          
                                              






                                                                      
                                                                                                     
 

                                                                  

                                                 

                                                 



                                                                           
                                              






                                                                      
                                                                                                      
 

                                                                  








                                                 
                                                    
        
                                           

                         
                                                

                         

                                                          













                                
                                               

                                                                
                                            
                                          
                                            
                                          
                                            



                         
                                            


                         
                                                          
        
                                                

                         
                                                

                                                                               
                                                                   




                                
                                                    
        
                                             

                         
                                                

                         

                                                          













                                
                                               

                                                                
                                              
                                            
                                              
                                            
                                            



                         
                                              


                         
                                                          
        
                                                  

                         
                                                

                                                                               
                                                                   






                         
                                            
 
                                       

                                   
                                              




























































                                                                              
                                              
                                      
                                            




                                        
                                             










































                                                                                
                                                 














                                                                            
                                                                    
                                                                       
                                                 








                                                                                                
                                                
                                        
                                              




                                                                             
                                             










































                                                                                
                                                 













                                                                            
                                                                    
                                                                       
                                                   








                                                                                                 
                                                                 


                         
                                          




                                         
                                                               


                         
                                          






























































                                                                        
                                                









































                                                                                                   
                                               



                                                                             
                                                 










                                        
                                            
                                   
                                               



                                                            
                                            


                                                            
                                            


                                                            
                                             






                                                             
                                                    
                                                            
                                                 


                                                                
                                                 








                                                                      
                                                 




                                                                         
                                                                    






                                                             
                                                        




                                                                    
                                                                       
























                                                                                            
                                             
                                      
                                            





                                        
                                             




                                                                    
                                             




                                                                         
                                             

                                                                    
                                              


                                                                    
                                                    



                                                                    
                                                    











                                                                             
                                                 
 
                                                                



















                                                                                
                                                               


                         
                                          




                                         
                                              





                                          
                                             




                                                                    
                                             




                                                                         
                                             

                                                                    
                                              


                                                                    
                                                    



                                                                    
                                                    











                                                                             
                                                 
 
                                                                













                                                                            
                                           
 
                                                         











                                                                                     
                                            



                                                                             
                                           








                         
                                               



                                                                               
                                            
                                                               
                                             
                                   
                                             
                                   
                                            


                                                                          
                                              







                                                            
                                              




                                                            
                                               









                                                             


                                                     









                                                                                     
                                                                               







                                                                
                                              
                                                                      
                                               
                                    
                                              
 
                                              

                                     
                                            
        
                                            





                                                                              
                                                 
                                                               
                                               
















                                                                                
                                                

























                                                                          
                                              






























                                                                                                                               
                                                     












                                                                                                
                                                  













                                                                                                  
                                           
              
                                              


                                                             
                                            

                                                                 
                                                 


















                                                                           
                                                

























                                                                  
                                             
















                                                                                             
                                           
              
                                            


                                                             
                                          

                                                                 
                                                 


















                                                                           
                                                

























                                                                  
                                             




























































                                                                                                           
                                              
                                                                     
                                              
                                    
                                           


                                     
                                            
                                                                       
                                            
                                   
                                           


                                     
                                              
 
                                           

                                     
                                            
 
                                         





                                                                                 
                                                 



                                                                 
                                             













                                                                              
                                                

























                                                                      
                                             






























                                                                                                                  
                                                     












                                                                                            
                                                  













                                                                                               
                                                     
                                                                                 
                                            
                                                            
                                              


                                     
                                                   
                                                                                 
                                            
                                                            
                                            


                                                             
                                          




















                                                            
                                                      






















                                                                     
                                                
                                                           
                                                





                                                                        
                                            























                                                                                           
                                            
                                                             
                                                
                                                           
                                                





                                                             
                                              







                                                            
                                              




                                                            
                                               









                                                             


                                                     







                                                                            
                                            















                                                                                           
                                                                               
 
                                                 










                                                                                      
                                                 





                         
                                               



                        
                                                   
                                                                                   
                                                     
                                                                                 
                                                





                           
                                            
 
                                 






































                                                                
                                                

























                                                                                 
                                         



                                    
                                         





































                                                                
                                                





































                                                                                                     
                                                   
                                  
                                                  


                          
                                             
          
                                                





                                    
                                            
 
                                         






































                                                                
                                                































                                                                                 
                                         




                                     
                                         



































                                                                
                                                












































                                                                                                     
                                                
                         
                                             
 
                                               
                                     
                                               
                                          
                                           

                              
                                                 

           
                                                
                         
                                            
 
                                             

                                
                                           



                         
                                                

                         
                                                  













                                 
                                             
                                         
                                           

                              
                                            

                  
                                            
                                             
                                                           




                                                     
                                            



                       
                                               
                                                                                        
                                               
                                                                                 
                                            
 
                                              











                                                            
                                                   
                                
                                            


                                                      
                                               
 
                                                    

                         
                                            

                         
                                               
                                     
                                             

                                   
                                              
 
                                             



                                       
                                            

                                          
                                                    

                         
                                            

                         
                                               


                                  
                                            


                                                            
                                            




                                                            
                                            




                                                            
                                             



                                                            
                                                    




                                                                  
                                                




                                                                        
                                            





                                                                        
                                                                   
 
                                                            

                                                                           
                                                 
























                                                                               
                                             
 
                                       





























                                                            
                                                


















                                                                        
                                            




                                                                        
                                                            









                                                                               
                                                 

                         
                                               










                                                                  
                                              
 
                                            
 
                                             





                                                            
                                            




                                                            
                                            




                                                            
                                             




                                                            
                                             



                                                            
                                                 




                                                                  
                                                




                                                                     
                                             
 
                                                 






                                                                        
                                               
        
                                                                   
 
                                                          

                                                                           
                                                 





































                                                                               
                                             
 
                                       












































                                                                  
                                                




                                                                     
                                             
 
                                                 






                                                                        
                                               


                                                                         
                                                          

                                                                           
                                                 

                                    
                                            


                                                            
                                            




                                                            
                                            




                                                            
                                             



                                                            
                                                    




                                                                  
                                                




                                                                        
                                            





                                                                        
                                                                   
 
                                                         

                                                                           
                                                   























                                                                               
                                            
 
                                             


                                                            
                                            




                                                            
                                            




                                                            
                                             




                                                            
                                             



                                                            
                                                 




                                                                  
                                                




                                                                        
                                             
 
                                                 






                                                                        
                                               
 
                                                                   
 
                                                          

                                                                           
                                                   





































                                                                               
                                                            



                                                             
                                                           







                                          
                                              
                                                                                
                                              
                                                                         
                                            
 
                                              











                                                            
                                                   
                                   
                                            


                                                         
                                               
 
                                                    

                         
                                            


                                         
                                              
                                        
                                             

                                      
                                              
 
                                             



                                          
                                            

                                             
                                                    

                         
                                            


                                         
                                              


                                     
                                               


                                                            
                                               


                                                            
                                               


                                                            
                                                






                                                            
                                                    




                                                                  
                                                    





                                                                        
                                                
                                                           
                                                                   









                                                                       

                                                                         


























































































                                                                                                           
                                             
 
                                          









































                                                                  
                                                    





                                                                        
                                                













                                                                               

                                                                         

                                                                                                           
                                                  
                         
                                                    










                                                                                        
                                              
 
                                            
 
                                             





                                                            
                                                




                                                            
                                               


                                                            
                                               


                                                            
                                               





                                                            
                                                    

                                                                
                                              


                                                                  
                                                      






                                                                        
                                                    

                                                             
                                                        





                                                                              
                                                                   





                                                                                      
                                                                         
                                                                      
                                                                         

                                                                     
                                                                         




















                                                                  
                                             
 
                                          











































                                                                  
                                                    


                                                                     
                                                     


                                                                        
                                                

                                                           
                                                   




                                                                                
                                                    







                                                                       

                                                                         















                                                                                                           
                                               


                                                            
                                               


                                                            
                                               


                                                            
                                                






                                                            
                                                    




                                                                  
                                                    





                                                                        
                                                
                                                           
                                                                   









                                                                       

                                                                         






                                                                                                           
                                            
 
                                             


                                                            
                                               




                                                            
                                               


                                                            
                                                


                                                            
                                                






                                                            
                                                    




                                                                  
                                                    


                                                                     
                                                     


                                                                        
                                                

                                                           
                                                   
 
                                                                    









                                                                       

                                                                         

















                                                                                                           
                                                            



                                                     
                                                           







                         
                                            
                                                              
                                             
                                                                      
                                             
                                      
                                              
 
                                            


                                        
                                                            
                                              
                                                            




                                                
                                         






























                                                               
                                                    




                                                                        
                                                













                                                                           

                                                                       




                                                                                                         
                                                








                                                                       
                                               
                                                                                                   
                                                 


                                                                                                     

                                             
 
                                             


































                                                               
                                                    




                                                                        
                                                













                                                                           

                                                                       
 
                                                 






                                                                                                         
                                                                     



                                                                        
                                                








                                                                       
                                                   

                                                                  
                                               
                                                                                   
                                                 


                                                                                   
                                            
                                    
                                               
                                                                                  
                                                 

                                                                                    
                                                    


                         
                                            

                         
                                             
 
                                            

                                    
                                              



                                        
                                             


                                                            
                                              




                                                            
                                              


                                                            
                                               


                                                            
                                               







                                                               
                                                    




                                                                        
                                                
                                                           
                                                                










                                                                       

                                                                       



                                                                                                         
                                                














                                                                         
                                             


                                                            
                                              


                                                            
                                              


                                                            
                                               


                                                            
                                               







                                                               
                                                    






                                                                        
                                                
                                                           
                                                                



                                       
                                            

                                           
                                            



                                                     
                                              
                                                                                         
                                                
                                                                                         
                                               
 
                                                    
                         
                                         






                                            
                                                        
                                                             
                                               
                                                         
                                            
                                                    
                                           

                         
                                                            











                                                                             
                                             


                              
                                                        
                                                             
                                                       
                                          
                                                   


                                             
                                                        
                                                             
                                             
                                                                                                
                                              
 
                                            




                                                                                                
                                              
                                                                         
                                            




                                                
                                            
                                                                                                     
                                            


                                       
                                            


                                         
                                            


                               
                                            

                                          
                                                     

                
                                                        
                                                             
                                               
                                                      
                                              
                                                      
                                           

                         
                                                            











                                                                             
                                                      






                         
                                            















                                                   
                                            



                                        
                                              











                                          

                                             
 
                                             



                         
                                             
































                                                               
                                                    




                                                                        
                                                





                                                                           
                                                                  







                                                                       

                                                                       







                                                                                                         
                                                                     



                                                                        
                                                


































                                                                              
                                              
                                
                                            
                              
                                               
                                     
                                             
                                   
                                            
 
                                          






































                                                                
                                                




































                                                                                 
                                             

                         
                                             




                                                            
                                             

                         
                                             




                                                            
                                              

                                 
                                            





                         
                                                






                          
                                                       
                                      
                                                         
                                       
                                           











                         
                                                       
                                     
                                           








                         
                                            

              
                                                           


                         
                                                         
                                      
                                           








                         
                                                 

               
                                                      

















































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































































                                             
	.intel_syntax noprefix

	.text

	.global	sin_real

sin_real:
	ucomisd	xmm0,qword ptr real_pi_d_4[rip]
	jbe		sin_real_1					# x<=pi/4 | NAN
	ucomisd	xmm0,qword ptr real_3_pi_d_4[rip]
	jbe		sin_real_2
	ucomisd	xmm0,qword ptr real_5_pi_d_4[rip]
	jbe		sin_real_3
	ucomisd	xmm0,qword ptr real_7_pi_d_4[rip]
	jbe		sin_real_4
	ucomisd	xmm0,qword ptr real_9_pi_d_4[rip]
	jbe		sin_real_5

	ucomisd	xmm0,qword ptr real_36825084_pi[rip]
	jbe		sin_real_0

	ucomisd	xmm0,qword ptr real_2_p_53[rip]
	jae		sin_cos_or_tan_real_too_large	# x>=-2^53

	call	rem_36825084_pi

	movlpd	xmm2,qword ptr real_pi_d_4_26[rip]
	movlpd	xmm3,qword ptr real_pi_d_4_26_26[rip]
	movlpd	xmm13,qword ptr real_pi_d_4_52_l[rip]

	mulsd	xmm2,xmm1
	mulsd	xmm3,xmm1
	mulsd	xmm13,xmm1

	andpd	xmm5,xmm1
	andpd	xmm6,xmm1

	subsd	xmm13,xmm7
	jmp		sin_real_0_

sin_real_0:
	movlpd	xmm1,qword ptr real_4_d_pi[rip]

	mulsd	xmm1,xmm0				# x*4/pi

	movq	xmm4,qword ptr round_even_c[rip]
	
	addsd	xmm1,qword ptr real_1_0[rip]	# x*4/pi+1
	
	movq	xmm2,xmm1
	psrlq	xmm1,52
	psubq	xmm4,xmm1

	movq	xmm1,qword ptr mask_all_one[rip]
	psllq	xmm1,xmm4
	andpd	xmm1,xmm2				# round_even (x*4/pi+1)

	movlpd	xmm2,qword ptr real_pi_d_4_26[rip]
	movlpd	xmm3,qword ptr real_pi_d_4_26_26[rip]
	movlpd	xmm13,qword ptr real_pi_d_4_52_l[rip]

	movq	xmm5,qword ptr mask_all_one_except_last[rip]
	psllq	xmm5,xmm4
	movq	xmm6,qword ptr mask_all_one_except_second_last[rip]
	psllq	xmm6,xmm4

	mulsd	xmm2,xmm1
	mulsd	xmm3,xmm1
	mulsd	xmm13,xmm1

	andpd	xmm5,xmm1
	andpd	xmm6,xmm1

sin_real_0_:
	ucomisd	xmm1,xmm5
	jne		sin_real_cos

sin_real_sin:
	ucomisd	xmm1,xmm6
	jne		sin_real_n_sin

	subsd	xmm0,xmm2
	subsd	xmm0,xmm3

	jmp		sin_real_p

sin_real_n_sin:
	movsd	xmm1,xmm3
	subsd	xmm0,xmm2
	subsd	xmm1,xmm0
	jmp		sin_real_m

sin_real_cos:
	subsd	xmm0,xmm2
	subsd	xmm0,xmm3

	ucomisd	xmm1,xmm6
	je		cos_real_p
	jmp		cos_real_m

sin_real_n:
	ucomisd	xmm0,qword ptr real_m_3_pi_d_4[rip]
	jae		sin_real_n_2
	ucomisd	xmm0,qword ptr real_m_5_pi_d_4[rip]
	jae		sin_real_n_3
	ucomisd	xmm0,qword ptr real_m_7_pi_d_4[rip]
	jae		sin_real_n_4
	ucomisd	xmm0,qword ptr real_m_9_pi_d_4[rip]
	jae		sin_real_n_5

	ucomisd	xmm0,qword ptr real_m_36825084_pi[rip]
	jae		sin_real_n_0

	ucomisd	xmm0,qword ptr real_m_2_p_53[rip]
	jbe		sin_cos_or_tan_real_too_small_or_nan	# x<=-2^53 | NAN

	call	rem_n_36825084_pi

	movlpd	xmm2,qword ptr real_pi_d_4_26[rip]
	movlpd	xmm3,qword ptr real_pi_d_4_26_26[rip]
	movlpd	xmm13,qword ptr real_pi_d_4_52_l[rip]

	mulsd	xmm2,xmm1
	mulsd	xmm3,xmm1
	mulsd	xmm13,xmm1

	andpd	xmm5,xmm1
	andpd	xmm6,xmm1

	subsd	xmm13,xmm7
	jmp		sin_real_n_0_

sin_real_n_0:
	movlpd	xmm1,qword ptr real_4_d_pi[rip]

	mulsd	xmm1,xmm0				# x*4/pi
	
	movq	xmm4,qword ptr m_round_even_c[rip]

	subsd	xmm1,qword ptr real_1_0[rip]	# x*4/pi-1
	
	movq	xmm2,xmm1
	psrlq	xmm1,52
	psubq	xmm4,xmm1

	movq	xmm1,qword ptr mask_all_one[rip]
	psllq	xmm1,xmm4
	andpd	xmm1,xmm2				# round_even (x*4/pi-1)

	movlpd	xmm2,qword ptr real_pi_d_4_26[rip]
	movlpd	xmm3,qword ptr real_pi_d_4_26_26[rip]
	movlpd	xmm13,qword ptr real_pi_d_4_52_l[rip]

	movq	xmm5,qword ptr mask_all_one_except_last[rip]
	psllq	xmm5,xmm4
	movq	xmm6,qword ptr mask_all_one_except_second_last[rip]
	psllq	xmm6,xmm4

	mulsd	xmm2,xmm1
	mulsd	xmm3,xmm1
	mulsd	xmm13,xmm1

	andpd	xmm5,xmm1
	andpd	xmm6,xmm1

sin_real_n_0_:
	ucomisd	xmm1,xmm5
	je		sin_real_sin

	subsd	xmm0,xmm2
	subsd	xmm0,xmm3

	ucomisd	xmm1,xmm6
	jne		cos_real_p
	jmp		cos_real_m

sin_real_1:
	ucomisd	xmm0,qword ptr real_m_pi_d_4[rip]
	jb		sin_real_n				# # x<-pi/4 | NAN

	ucomisd	xmm0,qword ptr real_0_43540000008249979402[rip]
	jae		sin_real_p_0_6
	ucomisd	xmm0,qword ptr real_m_0_43540000008249979402[rip]
	jbe		sin_real_m_0_6

	movsd	xmm1,xmm0				# x

	ucomisd	xmm0,qword ptr real_0_0[rip]
	je		sin_real_0_0			# sin -0.0 = -0.0

	mulsd	xmm0,xmm0				# x2

	movlpd	xmm5,qword ptr sin_p_0[rip]
	movlpd	xmm6,qword ptr sin_p_1[rip]

	movsd	xmm2,xmm1				# x
	mulsd	xmm1,xmm0				# x3
	
	movsd	xmm3,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

#	ucomisd	xmm3,qword ptr real_0_25 # x2>=0.25 (|x|>0.5)

	mulsd	xmm3,xmm1				# x5

	movlpd	xmm7,qword ptr sin_p_2[rip]
	movlpd	xmm8,qword ptr sin_p_3[rip]
	
	mulsd	xmm5,xmm1				# p3
	mulsd	xmm1,xmm0				# x7

	mulsd	xmm6,xmm3				# p5
	mulsd	xmm3,xmm0				# x9

	mulsd	xmm7,xmm1				# p7
	mulsd	xmm1,xmm0				# x11
	
	mulsd	xmm8,xmm3				# p9
	mulsd	xmm3,xmm0				# x13

	mulsd	xmm1,qword ptr sin_p_4[rip]	# p11
	mulsd	xmm3,qword ptr sin_p_5[rip]	# p13
	
	movsd	xmm0,xmm2				# x

	addsd	xmm1,xmm3				# p11+p13
	addsd	xmm1,xmm8				# p9+p11+p13
	
#	jae		sin_real_1_l

	addsd	xmm1,xmm7				# p7+p9+p11+p13
	addsd	xmm1,xmm6				# p5+p7+p9+p11+p13
	addsd	xmm1,xmm5				# p3+p5+p7+p9+p11+p13
	addsd	xmm0,xmm1				# x+p3+p5+p7+p9+p11+p13

sin_real_0_0:
	ret

#sin_real_1_l:
#	movlpd	xmm2,qword ptr real_47_bits
#	andpd	xmm2,xmm5				# p3h

#	addsd	xmm1,xmm7				# p7+p9+p11+p13

#	subsd	xmm5,xmm2				# p3l
#	addsd	xmm0,xmm2				# x+p3h

#	addsd	xmm1,xmm6				# p5+p7+p9+p11+p13
#	addsd	xmm1,xmm5				# p3l+p5+p7+p9+p11+p13
#	addsd	xmm0,xmm1				# x+p3+p5+p7+p9+p11+p13

#	ret

sin_real_m_0_6:
	movlpd	xmm1,qword ptr real_m_0_600000000082499762577[rip]

	ucomisd	xmm0,xmm1
	subsd	xmm0,xmm1

	lea		rcx,sin_p3_c[rip]
	lea		rdx,sin_p4_c[rip]

	cmova	rcx,rdx
	
	jmp		sin_real_0_6

sin_real_p_0_6:
	movlpd	xmm1,qword ptr real_0_600000000082499762577[rip]

	ucomisd	xmm0,xmm1
	subsd	xmm0,xmm1

	lea		rcx,sin_p1_c[rip]
	lea		rdx,sin_p2_c[rip]

	cmovb	rcx,rdx

sin_real_0_6:
	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	movlpd	xmm7,qword ptr (sin_p1_3-sin_p1_c)[rcx]
	movlpd	xmm8,qword ptr (sin_p1_2-sin_p1_c)[rcx]

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	mulsd	xmm7,xmm2				# p3
	mulsd	xmm8,xmm2				# p2

	movlpd	xmm9,qword ptr (sin_p1_5-sin_p1_c)[rcx]

	mulsd	xmm2,xmm0				# x6

	movsd	xmm4,xmm0				# x4
	mulsd	xmm0,xmm0				# x8
	
	mulsd	xmm9,xmm4				# p5
	mulsd	xmm4,qword ptr (sin_p1_4-sin_p1_c)[rcx] # p4

	movlpd	xmm11,qword ptr (sin_p1_7-sin_p1_c)[rcx]
	movlpd	xmm12,qword ptr (sin_p1_9-sin_p1_c)[rcx]

	mulsd	xmm11,xmm2				# p7
	mulsd	xmm2,qword ptr (sin_p1_6-sin_p1_c)[rcx] # p6

	mulsd	xmm12,xmm0				# p9
	mulsd	xmm0,qword ptr (sin_p1_8-sin_p1_c)[rcx] # p8
		
	addsd	xmm11,xmm12				# p9+p7
	addsd	xmm0,xmm2				# p8+p6

	movlpd	xmm2,qword ptr real_26_bits[rip]
	movsd	xmm3,xmm1				# x
	movlpd	xmm6,qword ptr (sin_p1_1l-sin_p1_c)[rcx]
	movlpd	xmm5,qword ptr (sin_p1_1h-sin_p1_c)[rcx]

	addsd	xmm9,xmm11				# p9+p7+p5
	addsd	xmm0,xmm4				# p8+p6+p4

	andpd	xmm2,xmm1				# x_h
	mulsd	xmm6,xmm1				# x*c1l
	movlpd	xmm13,qword ptr (sin_p1_0h-sin_p1_c)[rcx]

	addsd	xmm7,xmm9				# p9+p7+p5+p3
	addsd	xmm0,xmm8				# p8+p6+p4+p2

	subsd	xmm3,xmm2				# x_l
	mulsd	xmm2,xmm5				# x_h*c1h

	mulsd	xmm7,xmm1				# (p9+p7+p5+p3)(*x)

	movsd	xmm14,xmm13
	addsd	xmm13,xmm2				# x_h*c1h+c0h
	
	addsd	xmm0,xmm7				# p9+p8+..+p2

	subsd	xmm14,xmm13				# c0h-(x_h*c1h+c0h)
	mulsd	xmm3,xmm5				# x_l*c1h

#	addsd	xmm0,qword ptr (sin_p1_0l-sin_p1_c)[rcx]
	
	addsd	xmm14,xmm2				# (c0h-(x_h*c1h+c0h))+x_h*c1h
	addsd	xmm3,xmm6				# x_l*c1h+x*c1l
	
	addsd	xmm3,xmm14				# (c0h-(x_h*c1h+c0h))+x_h*c1h+x_l*c1h+x*c1l

	addsd	xmm0,xmm3
	addsd	xmm0,xmm13
	ret

sin_real_n_5:
	addsd	xmm0,qword ptr real_2_pi[rip]
	movlpd	xmm13,qword ptr real_m_2_pi_l[rip]
	jmp		sin_real_p

sin_real_5:
	subsd	xmm0,qword ptr real_2_pi[rip]
	movlpd	xmm13,qword ptr real_2_pi_l[rip]
	jmp		sin_real_p

cos_real_n_2:
	addsd	xmm0,qword ptr real_pi_d_2[rip]
	movlpd	xmm13,qword ptr real_m_pi_d_2_l[rip]
	jmp		sin_real_p

cos_real_4:
	subsd	xmm0,qword ptr real_3_pi_d_2[rip]
	movlpd	xmm13,qword ptr real_3_pi_d_2_l[rip]

sin_real_p:
	ucomisd	xmm0,qword ptr real_0_43540000008249979402[rip]

	movsd	xmm12,xmm0

	jae		sin_real_p_p_0_6
	ucomisd	xmm0,qword ptr real_m_0_43540000008249979402[rip]
	jb		sin_real_p_m_0_6

	subsd	xmm0,xmm13

	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	subsd	xmm12,xmm1

	movlpd	xmm5,qword ptr sin_p_0[rip]
	movlpd	xmm6,qword ptr sin_p_1[rip]

	movsd	xmm2,xmm1				# x
	mulsd	xmm1,xmm0				# x3
	
	movsd	xmm3,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	subsd	xmm12,xmm13				# x_l
	movsd	xmm14,xmm3				# x2

#	ucomisd	xmm3,qword ptr real_0_25 # x2>=0.25 (|x|>0.5)

	mulsd	xmm3,xmm1				# x5

	movlpd	xmm7,qword ptr sin_p_2[rip]
	movlpd	xmm8,qword ptr sin_p_3[rip]
		
	mulsd	xmm5,xmm1				# p3
	mulsd	xmm1,xmm0				# x7

	mulsd	xmm6,xmm3				# p5
	mulsd	xmm3,xmm0				# x9

	mulsd	xmm7,xmm1				# p7
	mulsd	xmm1,xmm0				# x11
	
	mulsd	xmm8,xmm3				# p9
	mulsd	xmm3,xmm0				# x13

	mulsd	xmm14,xmm12				# x_l*x2

	mulsd	xmm1,qword ptr sin_p_4[rip]	# p11
	mulsd	xmm3,qword ptr sin_p_5[rip]	# p13
	
	movsd	xmm0,xmm2				# x

	mulsd	xmm14,qword ptr real_0_5[rip] # 0.5*x_l*x2

	addsd	xmm1,xmm3				# p11+p13

	subsd	xmm12,xmm14				# x_l-0.5*x_l*x2

	addsd	xmm1,xmm8				# p9+p11+p13

#	jae		sin_real_p_l

	addsd	xmm1,xmm7				# p7+p9+p11+p13
	addsd	xmm1,xmm6				# p5+p7+p9+p11+p13
	addsd	xmm1,xmm5				# p3+p5+p7+p9+p11+p13

	addsd	xmm1,xmm12

	addsd	xmm0,xmm1				# x+p3+p5+p7+p9+p11+p13

	ret

#sin_real_p_l:
#	movlpd	xmm2,qword ptr real_47_bits
#	andpd	xmm2,xmm5				# p3h

#	addsd	xmm1,xmm7				# p7+p9+p11+p13

#	subsd	xmm5,xmm2				# p3l
#	addsd	xmm0,xmm2				# x+p3h

#	addsd	xmm1,xmm6				# p5+p7+p9+p11+p13
#	addsd	xmm1,xmm5				# p3+p5+p7+p9+p11+p13

#	addsd	xmm1,xmm12

#	addsd	xmm0,xmm1				# x+p3+p5+p7+p9+p11+p13

#	ret

sin_real_p_m_0_6:
	movlpd	xmm1,qword ptr real_m_0_600000000082499762577[rip]

	subsd	xmm0,xmm13

	ucomisd	xmm0,xmm1
	movsd	xmm15,xmm0				# x1
	subsd	xmm0,xmm1

	lea		rcx,sin_p3_c[rip]
	lea		rdx,sin_p4_c[rip]

	cmova	rcx,rdx
	jmp		sin_real_p_pm_0_6

sin_real_p_p_0_6:
	movlpd	xmm1,qword ptr real_0_600000000082499762577[rip]

	subsd	xmm0,xmm13

	ucomisd	xmm0,xmm1
	movsd	xmm15,xmm0				# x1
	subsd	xmm0,xmm1

	lea		rcx,sin_p1_c[rip]
	lea		rdx,sin_p2_c[rip]

	cmovb	rcx,rdx

sin_real_p_pm_0_6:
	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2
	subsd	xmm12,xmm15
	mulsd	xmm15,xmm15				# x1*x1

	movlpd	xmm7,qword ptr (sin_p1_3-sin_p1_c)[rcx]
	movlpd	xmm8,qword ptr (sin_p1_2-sin_p1_c)[rcx]

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	mulsd	xmm7,xmm2				# p3
	mulsd	xmm8,xmm2				# p2
	subsd	xmm12,xmm13				# x_l

sin_real_pm_0_6:
	mulsd	xmm15,qword ptr real_0_5[rip] # 0.5*x1*x1

	movlpd	xmm9,qword ptr (sin_p1_5-sin_p1_c)[rcx]

	mulsd	xmm2,xmm0				# x6

	movsd	xmm4,xmm0				# x4
	mulsd	xmm0,xmm0				# x8
	
	mulsd	xmm9,xmm4				# p5
	mulsd	xmm4,qword ptr (sin_p1_4-sin_p1_c)[rcx] # p4

	mulsd	xmm15,xmm12				# x_l*0.5*x1*x1

	movlpd	xmm11,qword ptr (sin_p1_7-sin_p1_c)[rcx]
	movlpd	xmm10,qword ptr (sin_p1_9-sin_p1_c)[rcx]

	mulsd	xmm11,xmm2				# p7
	mulsd	xmm2,qword ptr (sin_p1_6-sin_p1_c)[rcx] # p6

	mulsd	xmm10,xmm0				# p9
	mulsd	xmm0,qword ptr (sin_p1_8-sin_p1_c)[rcx] # p8

	addsd	xmm11,xmm10				# p9+p7
	addsd	xmm0,xmm2				# p8+p6

	subsd	xmm12,xmm15				# x_l-x_l*0.5*x1*x1

	movlpd	xmm2,qword ptr real_26_bits[rip]
	movsd	xmm3,xmm1				# x
	movlpd	xmm6,qword ptr (sin_p1_1l-sin_p1_c)[rcx]
	movlpd	xmm5,qword ptr (sin_p1_1h-sin_p1_c)[rcx]

	addsd	xmm9,xmm11				# p9+p7+p5
	addsd	xmm0,xmm4				# p8+p6+p4

	andpd	xmm2,xmm1				# x_h
	mulsd	xmm6,xmm1				# x*c1l
	movlpd	xmm13,qword ptr (sin_p1_0h-sin_p1_c)[rcx]

	addsd	xmm7,xmm9				# p9+p7+p5+p3
	addsd	xmm0,xmm8				# p8+p6+p4+p2

	subsd	xmm3,xmm2				# x_l
	mulsd	xmm2,xmm5				# x_h*c1h

	mulsd	xmm7,xmm1				# (p9+p7+p5+p3)(*x)

	movsd	xmm14,xmm13
	addsd	xmm13,xmm2				# x_h*c1h+c0h
	
	addsd	xmm0,xmm7				# p9+p8+..+p2

	subsd	xmm14,xmm13				# c0h-(x_h*c1h+c0h)
	mulsd	xmm3,xmm5				# x_l*c1h

#	addsd	xmm0,qword ptr (sin_p1_0l-sin_p1_c)[rcx]
	addsd	xmm0,xmm12
	
	addsd	xmm14,xmm2				# (c0h-(x_h*c1h+c0h))+x_h*c1h
	addsd	xmm3,xmm6				# x_l*c1h+x*c1l
	
	addsd	xmm3,xmm14				# (c0h-(x_h*c1h+c0h))+x_h*c1h+x_l*c1h+x*c1l

	addsd	xmm0,xmm3
	addsd	xmm0,xmm13
	ret

sin_real_3:
	movlpd	xmm1,qword ptr real_pi[rip]
	movlpd	xmm13,qword ptr real_pi_l[rip]
	subsd	xmm1,xmm0
	jmp		sin_real_m

cos_real_n_4:
	movlpd	xmm1,qword ptr real_m_3_pi_d_2[rip]
	movlpd	xmm13,qword ptr real_m_3_pi_d_2_l[rip]
	subsd	xmm1,xmm0
	jmp		sin_real_m

sin_real_n_3:
	movlpd	xmm1,qword ptr real_m_pi[rip]
	movlpd	xmm13,qword ptr real_m_pi_l[rip]
	subsd	xmm1,xmm0
	jmp		sin_real_m

cos_real_2:
	movlpd	xmm1,qword ptr real_pi_d_2[rip]
	movlpd	xmm13,qword ptr real_pi_d_2_l[rip]
	subsd	xmm1,xmm0

sin_real_m:
	ucomisd	xmm1,qword ptr real_0_43540000008249979402[rip]

	movsd	xmm12,xmm1

	jae		sin_real_m_p_0_6
	ucomisd	xmm1,qword ptr real_m_0_43540000008249979402[rip]
	jbe		sin_real_m_m_0_6

	addsd	xmm1,xmm13

	movsd	xmm0,xmm1				# x
	mulsd	xmm1,xmm1				# x2

	subsd	xmm12,xmm0

	movlpd	xmm5,qword ptr sin_p_0[rip]
	movlpd	xmm6,qword ptr sin_p_1[rip]

	movsd	xmm2,xmm0				# x
	mulsd	xmm0,xmm1				# x3

#	ucomisd	xmm1,qword ptr real_0_25 # x2>=0.25 (|x|>0.5)
	
	movsd	xmm3,xmm1				# x2
	mulsd	xmm1,xmm1				# x4

	addsd	xmm12,xmm13

	movsd	xmm14,xmm3
	mulsd	xmm3,xmm0				# x5

	movlpd	xmm7,qword ptr sin_p_2[rip]
	movlpd	xmm8,qword ptr sin_p_3[rip]
		
	mulsd	xmm5,xmm0				# p3
	mulsd	xmm0,xmm1				# x7

	mulsd	xmm6,xmm3				# p5
	mulsd	xmm3,xmm1				# x9

	mulsd	xmm7,xmm0				# p7
	mulsd	xmm0,xmm1				# x11
	
	mulsd	xmm8,xmm3				# p9
	mulsd	xmm3,xmm1				# x13

	mulsd	xmm14,xmm12

	mulsd	xmm0,qword ptr sin_p_4[rip]	# p11
	mulsd	xmm3,qword ptr sin_p_5[rip]	# p13
	
	movsd	xmm1,xmm2				# x

	mulsd	xmm14,qword ptr real_0_5[rip]

	addsd	xmm0,xmm3				# p11+p13

	subsd	xmm12,xmm14

	addsd	xmm0,xmm8				# p9+p11+p13

#	jae		sin_real_m_l

	addsd	xmm0,xmm7				# p7+p9+p11+p13
	addsd	xmm0,xmm6				# p5+p7+p9+p11+p13
	addsd	xmm0,xmm5				# p3+p5+p7+p9+p11+p13

	addsd	xmm0,xmm12

	addsd	xmm0,xmm1				# x+p3+p5+p7+p9+p11+p13

	ret

#sin_real_m_l:
#	movlpd	xmm2,qword ptr real_47_bits
#	andpd	xmm2,xmm5				# p3h

#	addsd	xmm0,xmm7				# p7+p9+p11+p13

#	subsd	xmm5,xmm2				# p3l
#	addsd	xmm1,xmm2				# x+p3h

#	addsd	xmm0,xmm6				# p5+p7+p9+p11+p13
#	addsd	xmm0,xmm5				# p3+p5+p7+p9+p11+p13

#	addsd	xmm0,xmm12

#	addsd	xmm0,xmm1				# x+p3+p5+p7+p9+p11+p13

#	ret

sin_real_m_m_0_6:
	addsd	xmm1,xmm13

	movlpd	xmm0,qword ptr real_0_600000000082499762577[rip]

	ucomisd	xmm1,qword ptr real_m_0_600000000082499762577[rip]
	movsd	xmm15,xmm1				# x1
	addsd	xmm0,xmm1

	lea		rcx,sin_p3_c[rip]
	lea		rdx,sin_p4_c[rip]

	cmova	rcx,rdx
	jmp		sin_real_m_pm_0_6

sin_real_m_p_0_6:
	addsd	xmm1,xmm13

	movlpd	xmm0,qword ptr real_m_0_600000000082499762577[rip]

	ucomisd	xmm1,qword ptr real_0_600000000082499762577[rip]
	movsd	xmm15,xmm1				# x1
	addsd	xmm0,xmm1

	lea		rcx,sin_p1_c[rip]
	lea		rdx,sin_p2_c[rip]

	cmovb	rcx,rdx

sin_real_m_pm_0_6:
	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2
	subsd	xmm12,xmm15
	mulsd	xmm15,xmm15				# x1*x1

	movlpd	xmm7,qword ptr (sin_p1_3-sin_p1_c)[rcx]
	movlpd	xmm8,qword ptr (sin_p1_2-sin_p1_c)[rcx]

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	mulsd	xmm7,xmm2				# p3
	mulsd	xmm8,xmm2				# p2

	addsd	xmm12,xmm13				# x_l
	jmp		sin_real_pm_0_6

	.global	cos_real

cos_real:
	ucomisd	xmm0,qword ptr real_pi_d_4[rip]
	jbe		cos_real_1				# x<=pi/4 | NAN
	ucomisd	xmm0,qword ptr real_3_pi_d_4[rip]
	jbe		cos_real_2
	ucomisd	xmm0,qword ptr real_5_pi_d_4[rip]
	jbe		cos_real_3
	ucomisd	xmm0,qword ptr real_7_pi_d_4[rip]
	jbe		cos_real_4
	ucomisd	xmm0,qword ptr real_9_pi_d_4[rip]
	jbe		cos_real_5

	ucomisd	xmm0,qword ptr real_36825084_pi[rip]
	jbe		cos_real_0

	ucomisd	xmm0,qword ptr real_2_p_53[rip]
	jae		sin_cos_or_tan_real_too_large	# x>=-2^53

	call	rem_36825084_pi

	movlpd	xmm2,qword ptr real_pi_d_4_26[rip]
	movlpd	xmm3,qword ptr real_pi_d_4_26_26[rip]
	movlpd	xmm13,qword ptr real_pi_d_4_52_l[rip]

	mulsd	xmm2,xmm1
	mulsd	xmm3,xmm1
	mulsd	xmm13,xmm1

	andpd	xmm5,xmm1
	andpd	xmm6,xmm1

	subsd	xmm13,xmm7
	jmp		cos_real_0_

cos_real_0:
	movlpd	xmm1,qword ptr real_4_d_pi[rip]

	mulsd	xmm1,xmm0				# x*4/pi
	
	addsd	xmm1,qword ptr real_1_0[rip]	# x*4/pi+1
	
	movq	xmm4,qword ptr round_even_c[rip]
	movq	xmm2,xmm1
	psrlq	xmm1,52
	psubq	xmm4,xmm1

	movq	xmm1,qword ptr mask_all_one[rip]
	psllq	xmm1,xmm4
	andpd	xmm1,xmm2				# round_even (x*4/pi+1)

	movlpd	xmm2,qword ptr real_pi_d_4_26[rip]
	movlpd	xmm3,qword ptr real_pi_d_4_26_26[rip]
	movlpd	xmm13,qword ptr real_pi_d_4_52_l[rip]

	movq	xmm5,qword ptr mask_all_one_except_last[rip]
	psllq	xmm5,xmm4
	movq	xmm6,qword ptr mask_all_one_except_second_last[rip]
	psllq	xmm6,xmm4

	mulsd	xmm2,xmm1
	mulsd	xmm3,xmm1
	mulsd	xmm13,xmm1

	andpd	xmm5,xmm1
	andpd	xmm6,xmm1

cos_real_0_:
	ucomisd	xmm1,xmm5
	jne		cos_real_sin

cos_real_cos:
	subsd	xmm0,xmm2
	subsd	xmm0,xmm3

	ucomisd	xmm1,xmm6
	je		cos_real_p
	jmp		cos_real_m

cos_real_sin:
	ucomisd	xmm1,xmm6
	jne		cos_real_p_sin

	movsd	xmm1,xmm3
	subsd	xmm0,xmm2
	subsd	xmm1,xmm0
	jmp		sin_real_m

cos_real_p_sin:
	subsd	xmm0,xmm2
	subsd	xmm0,xmm3
	jmp		sin_real_p

cos_real_n:
	ucomisd	xmm0,qword ptr real_m_3_pi_d_4[rip]
	jae		cos_real_n_2
	ucomisd	xmm0,qword ptr real_m_5_pi_d_4[rip]
	jae		cos_real_n_3
	ucomisd	xmm0,qword ptr real_m_7_pi_d_4[rip]
	jae		cos_real_n_4
	ucomisd	xmm0,qword ptr real_m_9_pi_d_4[rip]
	jae		cos_real_n_5

	ucomisd	xmm0,qword ptr real_m_36825084_pi[rip]
	jae		cos_real_n_0

	ucomisd	xmm0,qword ptr real_m_2_p_53[rip]
	jbe		sin_cos_or_tan_real_too_small_or_nan	# x<=-2^53 | NAN

	call	rem_n_36825084_pi

	movlpd	xmm2,qword ptr real_pi_d_4_26[rip]
	movlpd	xmm3,qword ptr real_pi_d_4_26_26[rip]
	movlpd	xmm13,qword ptr real_pi_d_4_52_l[rip]

	mulsd	xmm2,xmm1
	mulsd	xmm3,xmm1
	mulsd	xmm13,xmm1

	andpd	xmm5,xmm1
	andpd	xmm6,xmm1

	subsd	xmm13,xmm7
	jmp		cos_real_n_0_

cos_real_n_0:
	movlpd	xmm1,qword ptr real_4_d_pi[rip]

	mulsd	xmm1,xmm0				# x*4/pi
	
	movq	xmm4,qword ptr m_round_even_c[rip]

	subsd	xmm1,qword ptr real_1_0[rip]	# x*4/pi-1
	
	movq	xmm2,xmm1
	psrlq	xmm1,52
	psubq	xmm4,xmm1

	movq	xmm1,qword ptr mask_all_one[rip]
	psllq	xmm1,xmm4
	andpd	xmm1,xmm2				# round_even (x*4/pi-1)

	movlpd	xmm2,qword ptr real_pi_d_4_26[rip]
	movlpd	xmm3,qword ptr real_pi_d_4_26_26[rip]
	movlpd	xmm13,qword ptr real_pi_d_4_52_l[rip]

	movq	xmm5,qword ptr mask_all_one_except_last[rip]
	psllq	xmm5,xmm4
	movq	xmm6,qword ptr mask_all_one_except_second_last[rip]
	psllq	xmm6,xmm4

	mulsd	xmm2,xmm1
	mulsd	xmm3,xmm1
	mulsd	xmm13,xmm1

	andpd	xmm5,xmm1
	andpd	xmm6,xmm1

cos_real_n_0_:
	ucomisd	xmm1,xmm5
	je		cos_real_cos

	ucomisd	xmm1,xmm6
	je		cos_real_n_p_sin

	movsd	xmm1,xmm3
	subsd	xmm0,xmm2
	subsd	xmm1,xmm0
	jmp		sin_real_m

cos_real_n_p_sin:
	subsd	xmm0,xmm2
	subsd	xmm0,xmm3
	jmp		sin_real_p

cos_real_1:
	ucomisd	xmm0,qword ptr real_m_pi_d_4[rip]
	jb		cos_real_n				# x<-pi/4 | NAN

	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	movlpd	xmm9,qword ptr real_17_bits[rip]
	movlpd	xmm5,qword ptr cos_p_0[rip]

	movsd	xmm8,xmm1				# x

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	andpd	xmm9,xmm1				# x_17_h
	movlpd	xmm10,qword ptr real_0_5[rip]

	movsd	xmm3,xmm2				# x2
	mulsd	xmm2,xmm0				# x6

	movsd	xmm4,xmm0				# x4
	mulsd	xmm0,xmm0				# x8

	movlpd	xmm7,qword ptr cos_p_2[rip]

	mulsd	xmm5,xmm4				# p4
	mulsd	xmm4,xmm2				# x10

	movsd	xmm6,xmm2				# x6
	mulsd	xmm2,xmm2				# x12

	mulsd	xmm7,xmm0				# p8
	mulsd	xmm0,xmm6				# x14

	mulsd	xmm6,qword ptr cos_p_1[rip]	# p6	
	mulsd	xmm4,qword ptr cos_p_3[rip]	# p10
	mulsd	xmm2,qword ptr cos_p_4[rip]	# p12
	mulsd	xmm0,qword ptr cos_p_5[rip]	# p14

	subsd	xmm8,xmm9				# x_17_l
	mulsd	xmm10,xmm9				# 0.5*x_17_h

	addsd	xmm0,xmm2				# p12+p14
	
	mulsd	xmm10,xmm9				# 0.5*x_17_h*x_17_h
	movlpd	xmm11,qword ptr real_1_0[rip]

	addsd	xmm0,xmm4				# p10+p12+p14

	mulsd	xmm8,qword ptr real_0_5[rip]	# 0.5*x_17_l
	addsd	xmm9,xmm1				# x+x_17_h

	addsd	xmm0,xmm7				# p8+p10+p12+p14

	mulsd	xmm8,xmm9				# 0.5*x_17_l*(x+x_17_h)

	addsd	xmm0,xmm6				# p6+p8+p10+p12+p14

	ucomisd	xmm10,qword ptr real_2_p_m_18[rip] # 0.5*x_17_h*x_17_h<2**-18
	jb		cos_real_1_s

	subsd	xmm11,xmm10				# 1.0-0.5*x_17_h*x_17_h

	addsd	xmm0,xmm5				# p4+p6+p8+p10+p12+p14

	subsd	xmm0,xmm8
	addsd	xmm0,xmm11

	ret

cos_real_1_s:
	addsd	xmm0,xmm5				# p4+p6+p8+p10+p12+p14

	subsd	xmm0,xmm8
	subsd	xmm0,xmm10
	addsd	xmm0,xmm11

	ret

cos_real_n_5:
	addsd	xmm0,qword ptr real_2_pi[rip]
	movlpd	xmm13,qword ptr real_m_2_pi_l[rip]
	jmp		cos_real_p

cos_real_5:
	subsd	xmm0,qword ptr real_2_pi[rip]
	movlpd	xmm13,qword ptr real_2_pi_l[rip]
	jmp		cos_real_p

sin_real_n_4:
	addsd	xmm0,qword ptr real_3_pi_d_2[rip]
	movlpd	xmm13,qword ptr real_m_3_pi_d_2_l[rip]
	jmp		cos_real_p

sin_real_2:
	subsd	xmm0,qword ptr real_pi_d_2[rip]
	movlpd	xmm13,qword ptr real_pi_d_2_l[rip]

cos_real_p:
	movsd	xmm12,xmm0
	subsd	xmm0,xmm13

	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	subsd	xmm12,xmm1

	movlpd	xmm9,qword ptr real_17_bits[rip]
	movlpd	xmm5,qword ptr cos_p_0[rip]

	movsd	xmm8,xmm1				# x

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	subsd	xmm12,xmm13

	andpd	xmm9,xmm1				# x_17_h
	movlpd	xmm10,qword ptr real_0_5[rip]

	movsd	xmm3,xmm2				# x2
	mulsd	xmm2,xmm0				# x6

	movsd	xmm4,xmm0				# x4
	mulsd	xmm0,xmm0				# x8

	movlpd	xmm7,qword ptr cos_p_2[rip]

	mulsd	xmm12,xmm8

	mulsd	xmm5,xmm4				# p4
	mulsd	xmm4,xmm2				# x10

	movsd	xmm6,xmm2				# x6
	mulsd	xmm2,xmm2				# x12

	mulsd	xmm7,xmm0				# p8
	mulsd	xmm0,xmm6				# x14

	mulsd	xmm6,qword ptr cos_p_1[rip]	# p6	
	mulsd	xmm4,qword ptr cos_p_3[rip]	# p10
	mulsd	xmm2,qword ptr cos_p_4[rip]	# p12
	mulsd	xmm0,qword ptr cos_p_5[rip]	# p14

	subsd	xmm8,xmm9				# x_17_l
	mulsd	xmm10,xmm9				# 0.5*x_17_h

	addsd	xmm0,xmm2				# p12+p14
	
	mulsd	xmm10,xmm9				# 0.5*x_17_h*x_17_h
	movlpd	xmm11,qword ptr real_1_0[rip]

	addsd	xmm0,xmm4				# p10+p12+p14

	mulsd	xmm8,qword ptr real_0_5[rip]	# 0.5*x_17_l
	addsd	xmm9,xmm1				# x+x_17_h

	addsd	xmm0,xmm7				# p8+p10+p12+p14

	mulsd	xmm8,xmm9				# 0.5*x_17_l*(x+x_17_h)

	addsd	xmm0,xmm6				# p6+p8+p10+p12+p14

	ucomisd	xmm10,qword ptr real_2_p_m_18[rip] # 0.5*x_17_h*x_17_h<2**-18
	jb		cos_real__s

	subsd	xmm11,xmm10				# 1.0-0.5*x_17_h*x_17_h

	addsd	xmm0,xmm5				# p4+p6+p8+p10+p12+p14

	addsd	xmm8,xmm12

	subsd	xmm0,xmm8
	addsd	xmm0,xmm11

	ret

cos_real__s:
	addsd	xmm0,xmm5				# p4+p6+p8+p10+p12+p14

	addsd	xmm8,xmm12

	subsd	xmm0,xmm8
	subsd	xmm0,xmm10
	addsd	xmm0,xmm11

	ret

sin_real_4:
	subsd	xmm0,qword ptr real_3_pi_d_2[rip]
	movlpd	xmm13,qword ptr real_3_pi_d_2_l[rip]
	jmp		cos_real_m

cos_real_n_3:
	addsd	xmm0,qword ptr real_pi[rip]
	movlpd	xmm13,qword ptr real_m_pi_l[rip]
	jmp		cos_real_m

sin_real_n_2:
	addsd	xmm0,qword ptr real_pi_d_2[rip]
	movlpd	xmm13,qword ptr real_m_pi_d_2_l[rip]
	jmp		cos_real_m

cos_real_3:
	subsd	xmm0,qword ptr real_pi[rip]
	movlpd	xmm13,qword ptr real_pi_l[rip]

cos_real_m:
	movsd	xmm12,xmm0
	subsd	xmm0,xmm13

	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	subsd	xmm12,xmm1

	movlpd	xmm9,qword ptr real_17_bits[rip]
	movlpd	xmm5,qword ptr cos_p_0[rip]

	movsd	xmm8,xmm1				# x

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	subsd	xmm12,xmm13

	andpd	xmm9,xmm1				# x_17_h
	movlpd	xmm10,qword ptr real_0_5[rip]

	movsd	xmm3,xmm2				# x2
	mulsd	xmm2,xmm0				# x6

	movsd	xmm4,xmm0				# x4
	mulsd	xmm0,xmm0				# x8

	movlpd	xmm7,qword ptr cos_p_2[rip]

	mulsd	xmm12,xmm8

	mulsd	xmm5,xmm4				# p4
	mulsd	xmm4,xmm2				# x10

	movsd	xmm6,xmm2				# x6
	mulsd	xmm2,xmm2				# x12

	mulsd	xmm7,xmm0				# p8
	mulsd	xmm0,xmm6				# x14

	mulsd	xmm6,qword ptr cos_p_1[rip]	# p6	
	mulsd	xmm4,qword ptr cos_p_3[rip]	# p10
	mulsd	xmm2,qword ptr cos_p_4[rip]	# p12
	mulsd	xmm0,qword ptr cos_p_5[rip]	# p14

	subsd	xmm8,xmm9				# x_17_l
	mulsd	xmm10,xmm9				# 0.5*x_17_h

	addsd	xmm0,xmm2				# p12+p14
	
	mulsd	xmm10,xmm9				# 0.5*x_17_h*x_17_h
	movlpd	xmm11,qword ptr real_m_1_0[rip]

	addsd	xmm0,xmm4				# p10+p12+p14

	mulsd	xmm8,qword ptr real_0_5[rip]	# 0.5*x_17_l
	addsd	xmm9,xmm1				# x+x_17_h

	addsd	xmm0,xmm7				# p8+p10+p12+p14

	mulsd	xmm8,xmm9				# 0.5*x_17_l*(x+x_17_h)

	addsd	xmm0,xmm6				# p6+p8+p10+p12+p14
	
	ucomisd	xmm10,qword ptr real_2_p_m_18[rip] # 0.5*x_17_h*x_17_h<2**-18
	jb		cos_real_m_s

	addsd	xmm11,xmm10				# -1.0+0.5*x_17_h*x_17_h

	addsd	xmm0,xmm5				# p4+p6+p8+p10+p12+p14

	addsd	xmm8,xmm12

	subsd	xmm8,xmm0
	movsd	xmm0,xmm11
	addsd	xmm0,xmm8
	ret

cos_real_m_s:
	addsd	xmm0,xmm5				# p4+p6+p8+p10+p12+p14

	addsd	xmm8,xmm12

	subsd	xmm8,xmm0

	movsd	xmm0,xmm11
	addsd	xmm8,xmm10

	addsd	xmm0,xmm8
	ret

	.global	tan_real

tan_real:
	ucomisd	xmm0,qword ptr real_m_0_338[rip]
	jb		tan_real_n				# x<-0.338 | NAN
	ucomisd	xmm0,qword ptr real_0_89[rip]
	jbe		tan_real_1
	ucomisd	xmm0,qword ptr real_pi_m_0_699[rip]
	jbe		tan_real_2
	ucomisd	xmm0,qword ptr real_pi_p_0_89[rip]
	jbe		tan_real_3
	ucomisd	xmm0,qword ptr real_2pi_m_0_699[rip]
	jbe		tan_real_4
	ucomisd	xmm0,qword ptr real_2pi_p_0_89[rip]
	jbe		tan_real_5

	ucomisd	xmm0,qword ptr real_36825084_pi[rip]
	jbe		tan_real_0

	ucomisd	xmm0,qword ptr real_2_p_53[rip]
	jae		sin_cos_or_tan_real_too_large	# x>=-2^53

	call	rem_36825084_pi

tan_real_pn_l:
	movlpd	xmm2,qword ptr real_pi_d_4_26[rip]
	movlpd	xmm3,qword ptr real_pi_d_4_26_26[rip]
	movlpd	xmm12,qword ptr real_pi_d_4_52_l[rip]

	mulsd	xmm2,xmm1
	mulsd	xmm3,xmm1
	mulsd	xmm12,xmm1

	subsd	xmm12,xmm7
	jmp		tan_real_

tan_real_0:
	movlpd	xmm1,qword ptr real_4_d_pi[rip]

	mulsd	xmm1,xmm0				# x*4/pi
	
	addsd	xmm1,qword ptr real_1_0[rip]	# x*4/pi+1
	
	movq	xmm4,qword ptr round_even_c[rip]
tan_real_pn_0:
	movq	xmm2,xmm1
	psrlq	xmm1,52
	psubq	xmm4,xmm1
	movq	xmm1,qword ptr mask_all_one[rip]
	psllq	xmm1,xmm4
	andpd	xmm1,xmm2				# round_even (x*4/pi+1)

	movlpd	xmm2,qword ptr real_pi_d_4_26[rip]
	movlpd	xmm3,qword ptr real_pi_d_4_26_26[rip]
	movlpd	xmm12,qword ptr real_pi_d_4_52_l[rip]

	movq	xmm5,qword ptr mask_all_one_except_last[rip]
	psllq	xmm5,xmm4

	mulsd	xmm2,xmm1
	mulsd	xmm3,xmm1
	mulsd	xmm12,xmm1

tan_real_:
	andpd	xmm5,xmm1
	ucomisd	xmm1,xmm5
	jne		tan_real_0_2

	subsd	xmm0,xmm2
	subsd	xmm0,xmm3
	
	ucomisd	xmm0,qword ptr real_0_338[rip]
	ja		tan_real_0_1p
	ucomisd	xmm0,qword ptr real_m_0_338[rip]
	jae		tan_real_3_

	ucomisd	xmm0,qword ptr real_m_0_542[rip]
	ja		tan_real_0_5_n
	ucomisd	xmm0,qword ptr real_m_0_699[rip]
	ja		tan_real_s_0_5_n
	jmp		tan_real_1_0_3_n

tan_real_0_1p:
	ucomisd	xmm0,qword ptr real_0_542[rip]
	jb		tan_real_0_5_p
	ucomisd	xmm0,qword ptr real_0_699[rip]
	jb		tan_real_s_0_5_p
	jmp		tan_real_1_0_3

tan_real_0_2:
	subsd	xmm2,xmm0
	movsd	xmm1,xmm3
	addsd	xmm1,xmm2

	ucomisd	xmm1,qword ptr real_0_5_pi_m_1_18[rip]
	ja		tan_real_0_2p
	ucomisd	xmm1,qword ptr real_1_18_m_0_5_pi[rip]
	jae		tan_real_2_

	ucomisd	xmm1,qword ptr real_1_04_m_0_5_pi[rip]
	ja		tan_real_2_0_n
	ucomisd	xmm1,qword ptr real_0_89_m_0_5_pi[rip]
	ja		tan_real_s_2_n
	jmp		tan_real_1_0_n

tan_real_0_2p:
	ucomisd	xmm1,qword ptr real_0_5_pi_m_1_04[rip]
	jb		tan_real_2_0_p
	ucomisd	xmm1,qword ptr real_0_5_pi_m_0_89[rip]
	jb		tan_real_s_2_p
	jmp		tan_real_1_0_2_p

tan_real_n:
	ucomisd	xmm0,qword ptr real_m_0_89[rip]
	jae		tan_real_n_1
	ucomisd	xmm0,qword ptr real_n_pi_m_0_699[rip]
	jae		tan_real_n_2
	ucomisd	xmm0,qword ptr real_n_pi_p_0_89[rip]
	jae		tan_real_n_3
	ucomisd	xmm0,qword ptr real_n_2pi_m_0_699[rip]
	jae		tan_real_n_4
	ucomisd	xmm0,qword ptr real_n_2pi_p_0_89[rip]
	jae		tan_real_n_5

	ucomisd	xmm0,qword ptr real_m_36825084_pi[rip]
	jae		tan_real_n_0

	ucomisd	xmm0,qword ptr real_m_2_p_53[rip]
	jbe		sin_cos_or_tan_real_too_small_or_nan	# x<=-2^53 | NAN

	call	rem_n_36825084_pi
	jmp		tan_real_pn_l

tan_real_n_0:
	movlpd	xmm1,qword ptr real_4_d_pi[rip]

	mulsd	xmm1,xmm0				# x*4/pi
	
	subsd	xmm1,qword ptr real_1_0[rip]	# x*4/pi-1
	
	movq	xmm4,qword ptr m_round_even_c[rip]
	jmp		tan_real_pn_0

tan_real_1:
	ucomisd	xmm0,qword ptr real_0_699[rip]
	ja		tan_real_1_2
	ucomisd	xmm0,qword ptr real_0_338[rip]
	ja		tan_real_0_5

tan_real_1_0:
	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	movlpd	xmm6,qword ptr tan_q_1[rip]
	movlpd	xmm5,qword ptr tan_q_2[rip]

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	movlpd	xmm7,qword ptr tan_p_1[rip]
	mulsd	xmm6,xmm2				# q2

	movsd	xmm3,xmm2				# x2
	mulsd	xmm2,xmm0				# x6

	movsd	xmm4,xmm0				# x4
	mulsd	xmm0,xmm0				# x8

	mulsd	xmm5,xmm4				# q4
	mulsd	xmm2,qword ptr tan_q_3[rip]	# q6
	
	mulsd	xmm4,qword ptr tan_p_2[rip]	# p4

	addsd	xmm0,xmm2				# x8+q6

	mulsd	xmm7,xmm3				# p2

	addsd	xmm0,xmm5				# x8+q6+q4

	addsd	xmm4,xmm7				# p4+p2

	addsd	xmm0,xmm6				# x8+q6+q4+q2

	addsd	xmm4,qword ptr tan_p_0[rip]	# p4+p2+p0

	addsd	xmm0,qword ptr tan_q_0[rip]	# x8+q6+q4+q2+q0

	divsd	xmm4,xmm0				# p/q

	mulsd	xmm3,xmm1				# x3
	movsd	xmm0,xmm1				# x

	mulsd	xmm3,xmm4
	addsd	xmm0,xmm3

	ret

tan_real_m_0_5:
	ucomisd	xmm0,qword ptr real_m_0_542[rip]
	jb		tan_real_n_s_0_5

	movlpd	xmm1,qword ptr atan_0_5_53[rip]
	movlpd	xmm10,qword ptr real_49_bits[rip]

	addsd	xmm1,xmm0
	andpd	xmm10,xmm0				# x_h

	lea		rdx,tan_n_0_5_t[rip]
	addsd	xmm1,qword ptr atan_0_5_53_l[rip] # y=x+atan 0.5
	jmp		tan_real_0_5_a_s_0_5_a_s_2

tan_real_n_s_0_5:
	movlpd	xmm1,qword ptr atan_sqrt_0_5[rip]
	movlpd	xmm10,qword ptr real_51_bits[rip]

	addsd	xmm1,xmm0
	andpd	xmm10,xmm0				# x_h
	
	lea		rdx,tan_n_s_0_5_t[rip]
	addsd	xmm1,qword ptr atan_sqrt_0_5_l[rip] # y=x+atan sqrt 0.5
	jmp		tan_real_0_5_a_s_0_5_a_s_2

tan_real_0_5:
	ucomisd	xmm0,qword ptr real_0_542[rip]
	ja		tan_real_s_0_5

	movlpd	xmm1,qword ptr m_atan_0_5_53[rip]
	movlpd	xmm10,qword ptr real_49_bits[rip]

	addsd	xmm1,xmm0
	andpd	xmm10,xmm0				# x_h

	lea		rdx,tan_0_5_t[rip]
	subsd	xmm1,qword ptr atan_0_5_53_l[rip] # y=x-atan 0.5
	jmp		tan_real_0_5_a_s_0_5_a_s_2

tan_real_s_0_5:
	movlpd	xmm1,qword ptr m_atan_sqrt_0_5[rip]
	movlpd	xmm10,qword ptr real_51_bits[rip]

	addsd	xmm1,xmm0
	andpd	xmm10,xmm0				# x_h
	
	lea		rdx,tan_s_0_5_t[rip]
	subsd	xmm1,qword ptr atan_sqrt_0_5_l[rip] # y=x-atan sqrt 0.5

tan_real_0_5_a_s_0_5_a_s_2:
	subsd	xmm0,xmm10				# x_l

	movsd	xmm2,xmm1				# y
	mulsd	xmm1,xmm1				# y2

	mulsd	xmm10,qword ptr [rdx]	# 1.25|1.5|3*x_h

	movlpd	xmm7,qword ptr tan3_q_1[rip]
	movlpd	xmm6,qword ptr tan3_q_2[rip]

	movsd	xmm3,xmm1				# y2
	mulsd	xmm1,xmm1				# y4

	movlpd	xmm9,qword ptr tan3_q_3[rip]
	mulsd	xmm7,xmm3				# q2

	movsd	xmm4,xmm3				# y2
	mulsd	xmm3,xmm1				# y6

	movlpd	xmm8,qword ptr tan3_p_0[rip]

	movsd	xmm5,xmm1				# y4
	mulsd	xmm1,xmm1				# y8

	mulsd	xmm9,xmm3				# q6
	mulsd	xmm3,qword ptr tan3_p_2[rip]	# p6

	mulsd	xmm6,xmm5				# q4
	mulsd	xmm5,qword ptr tan3_p_1[rip]	# p4
	
	addsd	xmm1,xmm9				# y8+q6

	mulsd	xmm8,xmm4				# p2

	addsd	xmm1,xmm6				# y8+q6+q4

	mulsd	xmm0,qword ptr [rdx]	# 1.25|1.5|3*x_l

	movlpd	xmm6,qword ptr 8[rdx]	# 0.5|sqrt 0.5|sqrt 2

	addsd	xmm3,xmm5				# p6+p4
	addsd	xmm1,xmm7				# y8+q6+q4+q2

	mulsd	xmm6,xmm2				# 0.5|sqrt 0.5|sqrt 2*y

	addsd	xmm3,xmm8				# p6+p4+p2
	addsd	xmm1,qword ptr tan3_q_0[rip]	# y8+q6+q4+q2+q0

	movsd	xmm4,xmm3				# p
	addsd	xmm4,xmm1				# p+q
	
	mulsd	xmm4,xmm6				# 0.5|sqrt 0.5|sqrt 2*y*(p+q)

	mulsd	xmm2,qword ptr [rdx]	# 1.25|1.5|3*y

	addsd	xmm3,xmm4				# p+y*(p+q)
	subsd	xmm1,xmm4				# q-y*(p+q)

	divsd	xmm3,xmm1				# (p-y*(p+q))/(q+y*(p+q))
	
	addsd	xmm0,qword ptr 16[rdx]	# (0.5-1.25atan0.5)_49_l | (sqrt0.5-1.5atan(sqrt0.5))_l | (sqrt2-3atan(sqrt2))_l

	mulsd	xmm2,xmm3				# 1.25|1.5|3 * y * (p-y*(p+q))/(q+y*(p+q))

	addsd	xmm10,qword ptr 24[rdx]	# (0.5-1.25atan0.5)_49 | sqrt0.5-1.5atan(sqrt0.5) | sqrt2-3atan(sqrt2)

	addsd	xmm0,xmm2

	addsd	xmm0,xmm10				# 0.5|sqrt 0.5|sqrt 2+1.25|1.5|3y+1.25|1.5|3y * ..

	ret

tan_real_n_1:
	ucomisd	xmm0,qword ptr real_m_0_699[rip]
	ja		tan_real_m_0_5

tan_real_n_1_2:
	movlpd	xmm1,qword ptr real_pi_d_4[rip]

	addsd	xmm1,xmm0
	addsd	xmm0,xmm0				# 2x

	addsd	xmm1,qword ptr real_pi_d_4_l[rip] # y=pi/4+x

	addsd	xmm0,qword ptr real_pi_d_2_m_1_0_52[rip] # 1+2x-pi/2=1-2y
	movlpd	xmm10,qword ptr real_m_pi_d_2_m_1_0_52_l[rip]
	movlpd	xmm11,qword ptr real_m_2_0[rip]
	jmp		tan_real_1_2_

tan_real_1_2:
	movlpd	xmm1,qword ptr real_pi_d_4[rip]

	subsd	xmm1,xmm0
	addsd	xmm0,xmm0				# 2x

	addsd	xmm1,qword ptr real_pi_d_4_l[rip] # y=pi/4-x
	subsd	xmm0,qword ptr real_pi_d_2_m_1_0_52[rip] # 1+2x-pi/2=1-2y
	movlpd	xmm10,qword ptr real_pi_d_2_m_1_0_52_l[rip]
	movlpd	xmm11,qword ptr real_2_0[rip]

tan_real_1_2_:
	movsd	xmm2,xmm1				# y
	mulsd	xmm1,xmm1				# y2

	movlpd	xmm7,qword ptr tan3_q_1[rip]
	movlpd	xmm6,qword ptr tan3_q_2[rip]

	movsd	xmm3,xmm1				# y2
	mulsd	xmm1,xmm1				# y4

	movlpd	xmm9,qword ptr tan3_q_3[rip]
	mulsd	xmm7,xmm3				# q2

	movsd	xmm4,xmm3				# y2
	mulsd	xmm3,xmm1				# y6

	movlpd	xmm8,qword ptr tan3_p_0[rip]

	movsd	xmm5,xmm1				# y4
	mulsd	xmm1,xmm1				# y8

	mulsd	xmm9,xmm3				# q6
	mulsd	xmm3,qword ptr tan3_p_2[rip]	# p6

	mulsd	xmm6,xmm5				# q4
	mulsd	xmm5,qword ptr tan3_p_1[rip]	# p4
	
	addsd	xmm1,xmm9				# y8+q6

	mulsd	xmm8,xmm4				# p2

	addsd	xmm1,xmm6				# y8+q6+q4

	addsd	xmm3,xmm5				# p6+p4
	addsd	xmm1,xmm7				# y8+q6+q4+q2

	addsd	xmm3,xmm8				# p6+p4+p2
	addsd	xmm1,qword ptr tan3_q_0[rip]	# y8+q6+q4+q2+q0

	movsd	xmm4,xmm3				# p
	addsd	xmm4,xmm1				# p+q

	mulsd	xmm4,xmm2				# y*(p+q)
	mulsd	xmm2,xmm11				# 2y

	subsd	xmm3,xmm4				# p-y*(p+q)
	addsd	xmm1,xmm4				# q+y*(p+q)

	divsd	xmm3,xmm1				# (p-y*(p+q))/(q+y*(p+q))
	
	mulsd	xmm2,xmm3				# 2y * (p-y*(p+q))/(q+y*(p+q))

	addsd	xmm2,xmm10
	
	subsd	xmm0,xmm2				# 1-2y-2y * ..

	ret

tan_real_n_4:
	ucomisd	xmm0,qword ptr real_n_pi_p_1_18[rip]

	movlpd	xmm1,qword ptr real_m_3_pi_d_2[rip]
	movlpd	xmm12,qword ptr real_m_3_pi_d_2_l[rip]

	ja		tan_real_n_2_0_4_n

	ucomisd	xmm0,qword ptr real_n_2pi_m_0_89[rip]
	jb		tan_real_n_1_0_2
	ucomisd	xmm0,qword ptr real_n_2pi_m_1_18[rip]
	jb		tan_real_n_2_0_4_p
	jmp		tan_real_24

tan_real_4:
	ucomisd	xmm0,qword ptr real_pi_p_1_18[rip]

	movlpd	xmm1,qword ptr real_3_pi_d_2[rip]
	movlpd	xmm12,qword ptr real_3_pi_d_2_l[rip]

	jb		tan_real_2_0_2_p

	ucomisd	xmm0,qword ptr real_2pi_m_0_89[rip]
	ja		tan_real_1_0_2
	ucomisd	xmm0,qword ptr real_2pi_m_1_18[rip]
	ja		tan_real_2_0_4_n
	jmp		tan_real_24

tan_real_n_2:
	ucomisd	xmm0,qword ptr real_m_1_18[rip]
	ja		tan_real_n_s_2

	movlpd	xmm1,qword ptr real_m_pi_d_2[rip]
	movlpd	xmm12,qword ptr real_m_pi_d_2_l[rip]

	ucomisd	xmm0,qword ptr real_n_pi_m_0_89[rip]
	jb		tan_real_n_1_0_2
	ucomisd	xmm0,qword ptr real_n_pi_m_1_18[rip]
	jb		tan_real_n_2_0_2_n

	jmp		tan_real_24

tan_real_2:
	ucomisd	xmm0,qword ptr real_1_18[rip]
	jb		tan_real_s_2

	movlpd	xmm1,qword ptr real_pi_d_2[rip]
	movlpd	xmm12,qword ptr real_pi_d_2_l[rip]

	ucomisd	xmm0,qword ptr real_pi_m_0_89[rip]
	ja		tan_real_1_0_2
	ucomisd	xmm0,qword ptr real_pi_m_1_18[rip]
	ja		tan_real_2_0_2_n

tan_real_24:
	subsd	xmm1,xmm0				# y_1

tan_real_2_:
	movlpd	xmm2,qword ptr real_18_bits[rip]
	movsd	xmm3,xmm12

	andpd	xmm2,xmm1				# y_1_h
	addsd	xmm3,xmm1				# y

	movsd	xmm6,xmm1				# y_1
	subsd	xmm1,xmm2				# y_1-y_1_h

	movsd	xmm0,xmm2				# y_1_h
	addsd	xmm2,xmm3				# y+y_1_h
	addsd	xmm1,xmm12				# y_1_l

	mulsd	xmm0,xmm0				# y_1_h^2
	mulsd	xmm1,xmm2				# (y+y_1_h)*y_1_l

	movsd	xmm13,xmm0				# y_1_h^2
	addsd	xmm0,xmm1				# y^2

	movsd	xmm14,xmm1				# (y_1^2)_l
	movsd	xmm1,xmm3				# y
	subsd	xmm3,xmm6				# y-y_1

	movlpd	xmm5,qword ptr tan2_q_1[rip]
	movlpd	xmm9,qword ptr tan2_p_0[rip]

	subsd	xmm12,xmm3				# y_s

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	mulsd	xmm5,xmm2				# q2
	mulsd	xmm9,xmm2				# p2

	movlpd	xmm6,qword ptr tan2_q_2[rip]
	movlpd	xmm11,qword ptr tan2_p_1[rip]

	movsd	xmm3,xmm2				# x2
	mulsd	xmm2,xmm1				# x3

	movsd	xmm8,xmm1				# x

	movlpd	xmm10,qword ptr real_0_5[rip]

	mulsd	xmm6,xmm0				# q4
	mulsd	xmm11,xmm0				# p4

	addsd	xmm5,xmm6				# q4+q2

	movlpd	xmm7,qword ptr real_1_0[rip]

	mulsd	xmm10,xmm3				# 0.5*x2
	mulsd	xmm3,xmm0				# x6	

	addsd	xmm5,qword ptr tan2_q_0[rip]	# q4+q2+q0

	mulsd	xmm0,xmm0				# x8
	mulsd	xmm3,qword ptr tan2_p_2[rip]	# p6

	mulsd	xmm5,xmm2				# (q4+q2+q0)*x3

	mulsd	xmm0,qword ptr tan2_p_3[rip]	# p8

	movsd	xmm2,xmm5				# (q4+q2+q0)*x3
	addsd	xmm5,xmm8				# (q4+q2+q0)*x3+x

	addsd	xmm0,xmm3				# p8+p6

	divsd	xmm7,xmm5				# 1/(q4+q2+q0)*x3+x

	movlpd	xmm4,qword ptr real_25_bits[rip]

	addsd	xmm0,xmm11				# p8+p6+p4
	
	andpd	xmm5,xmm4				# q_h
	
	addsd	xmm0,xmm9				# p8+p6+p4+p2

	movlpd	xmm9,qword ptr real_18_bits[rip]

#	ucomisd	xmm8,qword ptr real_0_4
	ucomisd	xmm10,qword ptr real_2_p_m_31[rip]

	subsd	xmm8,xmm5				# x-q_h	

	addsd	xmm8,xmm2				# q_l=q-q_h
	movlpd	xmm6,qword ptr real_1_0[rip]

	jb		tan_real_2_s			# x<1.25*2**-16

tan_real_2_1:
	movsd	xmm3,xmm0				# p

	mulsd	xmm14,qword ptr real_0_5[rip] # (0.5*x2)_l
	mulsd	xmm13,qword ptr real_0_5[rip] # (0.5*x2)_h

	subsd	xmm3,xmm10				# p-0.5*x2
	addsd	xmm8,xmm12				# q_l+y_s

	subsd	xmm0,xmm14				# p-(0.5*x2)_l

	andpd	xmm9,xmm7				# (1/q)_h

	mulsd	xmm5,xmm9				# q_h*(1/q)_h
	mulsd	xmm8,xmm9				# q_l*(1/q)_h

	mulsd	xmm13,xmm9				# (0.5*x2)_h*(1/q)_h
	mulsd	xmm0,xmm9				# (p-(0.5*x2)_l)*(1/q)_h
	movlpd	xmm1,qword ptr real_21_bits[rip]

	subsd	xmm6,xmm5				# 1-q_h*(1/q)_h

	andpd	xmm1,xmm0				# ((p-(0.5*x2)_l)*(1/q)_h)_h
	
	subsd	xmm6,xmm8				# 1-(q_h+q_l)*(1/q)_h

	subsd	xmm0,xmm1				# ((p-(0.5*x2)_l)*(1/q)_h)_l
	subsd	xmm1,xmm13				# ((p-(0.5*x2)_l)*(1/q)_h)_h-(0.5*x2)_h*(1/q)_h
	movlpd	xmm2,qword ptr real_21_bits[rip]

	mulsd	xmm7,xmm6				# (1/q)_l

	andpd	xmm2,xmm1				# (((p-(0.5*x2)_l)*(1/q)_h)_h-(0.5*x2)_h*(1/q)_h)_h

	mulsd	xmm3,xmm7				# (p-0.5x2)*(1/q)_l

	subsd	xmm1,xmm2				# (((p-(0.5*x2)_l)*(1/q)_h)_h-(0.5*x2)_h*(1/q)_l
	addsd	xmm2,xmm9				# (((p-(0.5*x2)_l)*(1/q)_h)_h-(0.5*x2)_h*(1/q)_h)_h+(1/q)_h

	addsd	xmm0,xmm3				# ((p-(0.5*x2)_l)*(1/q)_h)_l+(p-0.5x2)*(1/q)_l

	addsd	xmm0,xmm7				# ((p-(0.5*x2)_l)*(1/q)_h)_l+(p-0.5x2)*(1/q)_l+(1/q)_l

	addsd	xmm0,xmm1				# ((p-(0.5*x2)_l)*(1/q)_h)+(p-0.5x2)*(1/q)_l+(1/q)_l
									# -(0.5*x2)_h*(1/q)_l
	addsd	xmm0,xmm2

	ret	

tan_real_2_s:
	subsd	xmm0,xmm10				# p-0.5*x2
	addsd	xmm8,xmm12				# q_l+y_s

	andpd	xmm9,xmm7				# (1/q)_h

	mulsd	xmm0,xmm7				# (p-0.5*x2)*(1/q)

	mulsd	xmm5,xmm9				# q_h*(1/q)_h
	mulsd	xmm8,xmm9				# q_l*(1/q)_h
	
	subsd	xmm6,xmm5				# 1-q_h*(1/q)_h
	
	subsd	xmm6,xmm8				# 1-(q_h+q_l)*(1/q)_h

	mulsd	xmm6,xmm7				# (1/q)_l

	addsd	xmm0,xmm6				# (p/q)_l+(1/q)_l
	
	addsd	xmm0,xmm9				# p/q+1/q

	ret

# x<0.4
#	subsd	xmm0,xmm10				# p-0.5*x2
#	addsd	xmm8,xmm12				# q_l+y_s

#	andpd	xmm9,xmm7				# (1/q)_h

#	mulsd	xmm0,xmm7				# (p-0.5*x2)*(1/q)

#	movlpd	xmm4,qword ptr real_21_bits

#	mulsd	xmm5,xmm9				# q_h*(1/q)_h
#	mulsd	xmm8,xmm9				# q_l*(1/q)_h

#	andpd	xmm4,xmm0				# (p/q)_h
	
#	subsd	xmm6,xmm5				# 1-q_h*(1/q)_h

#	subsd	xmm0,xmm4				# (p/q)_l
#	addsd	xmm4,xmm9				# (p/q)_h+(1/q)_h
	
#	subsd	xmm6,xmm8				# 1-(q_h+q_l)*(1/q)_h

#	mulsd	xmm6,xmm7				# (1/q)_l

#	addsd	xmm0,xmm6				# (p/q)_l+(1/q)_l	
	
#	addsd	xmm0,xmm4				# p/q+1/q

#	ret

tan_real_n_s_2:
	ucomisd	xmm0,qword ptr real_m_1_04[rip]
	jb		tan_real_n_2_0

	movlpd	xmm1,qword ptr atan_sqrt_2[rip]
	movlpd	xmm10,qword ptr real_51_bits[rip]

	lea		rdx,tan_n_s_2_t[rip]

	addsd	xmm1,xmm0
	andpd	xmm10,xmm0				# x_h

	addsd	xmm1,qword ptr atan_sqrt_2_l[rip] # y=x+atan sqrt 2
	jmp		tan_real_0_5_a_s_0_5_a_s_2

tan_real_s_2:
	ucomisd	xmm0,qword ptr real_1_04[rip]
	ja		tan_real_2_0

	movlpd	xmm1,qword ptr m_atan_sqrt_2[rip]
	movlpd	xmm10,qword ptr real_51_bits[rip]

	lea		rdx,tan_s_2_t[rip]

	addsd	xmm1,xmm0
	andpd	xmm10,xmm0				# x_h

	subsd	xmm1,qword ptr atan_sqrt_2_l[rip] # y=x-atan sqrt 2
	jmp		tan_real_0_5_a_s_0_5_a_s_2

tan_real_n_2_0:
	movlpd	xmm1,qword ptr atan_2_53[rip]
	movlpd	xmm10,qword ptr real_49_bits[rip]

	addsd	xmm1,xmm0
	andpd	xmm10,xmm0				# x_h

	addsd	xmm1,qword ptr atan_2_53_l[rip] # y=x+atan 2
	subsd	xmm0,xmm10				# x_l

	movlpd	xmm11,qword ptr real_5_atan_2_m_2_53_l[rip]
	movlpd	xmm12,qword ptr real_5_atan_2_m_2_53[rip]
	movlpd	xmm13,qword ptr real_m_2_0[rip]
	jmp		tan_real_2_0_

tan_real_2_0:
	movlpd	xmm1,qword ptr m_atan_2_53[rip]
	movlpd	xmm10,qword ptr real_49_bits[rip]

	addsd	xmm1,xmm0
	andpd	xmm10,xmm0				# x_h

	subsd	xmm1,qword ptr atan_2_53_l[rip] # y=x-atan 2
	subsd	xmm0,xmm10				# x_l

	movlpd	xmm11,qword ptr real_n_2_m_5_atan_2_53_l[rip]
	movlpd	xmm12,qword ptr real_n_2_m_5_atan_2_53[rip]
	movlpd	xmm13,qword ptr real_2_0[rip]

tan_real_2_0_:
	movsd	xmm2,xmm1				# y
	mulsd	xmm1,xmm1				# y2

	mulsd	xmm10,qword ptr real_5_0[rip] # 5*x_h

	movlpd	xmm7,qword ptr tan3_q_1[rip]
	movlpd	xmm6,qword ptr tan3_q_2[rip]

	movsd	xmm3,xmm1				# y2
	mulsd	xmm1,xmm1				# y4

	movlpd	xmm9,qword ptr tan3_q_3[rip]
	mulsd	xmm7,xmm3				# q2

	movsd	xmm4,xmm3				# y2
	mulsd	xmm3,xmm1				# y6

	movlpd	xmm8,qword ptr tan3_p_0[rip]

	movsd	xmm5,xmm1				# y4
	mulsd	xmm1,xmm1				# y8

	mulsd	xmm9,xmm3				# q6
	mulsd	xmm3,qword ptr tan3_p_2[rip]	# p6

	mulsd	xmm6,xmm5				# q4
	mulsd	xmm5,qword ptr tan3_p_1[rip]	# p4
	
	addsd	xmm1,xmm9				# y8+q6

	mulsd	xmm8,xmm4				# p2

	addsd	xmm1,xmm6				# y8+q6+q4

	mulsd	xmm0,qword ptr real_5_0[rip]	# 5*x_l

	addsd	xmm3,xmm5				# p6+p4
	addsd	xmm1,xmm7				# y8+q6+q4+q2

	mulsd	xmm13,xmm2				# 2*y

	addsd	xmm3,xmm8				# p6+p4+p2
	addsd	xmm1,qword ptr tan3_q_0[rip]	# y8+q6+q4+q2+q0

	movsd	xmm4,xmm3				# p
	addsd	xmm4,xmm1				# p+q
	
	mulsd	xmm4,xmm13				# 2*y*(p+q)

#	mulsd	xmm2,qword ptr real_5_0	# 5*y

	addsd	xmm3,xmm4				# p+y*(p+q)
	subsd	xmm1,xmm4				# q-y*(p+q)

	divsd	xmm3,xmm1				# (p-y*(p+q))/(q+y*(p+q))
	
	addsd	xmm0,xmm11

	mulsd	xmm2,xmm3				# y * (p-y*(p+q))/(q+y*(p+q))

	addsd	xmm10,xmm12				# 2+5*x_h-5*atan 2=2-5*y

	mulsd	xmm2,qword ptr real_5_0[rip]	# 5*y*..

	addsd	xmm0,xmm2

	addsd	xmm0,xmm10				# 2+5*y+5*y * ..

	ret

tan_real_n_2_0_4_p:
	ucomisd	xmm0,qword ptr real_n_2pi_m_1_04[rip]
	subsd	xmm1,xmm0
	jb		tan_real_s_2_p
	jmp		tan_real_2_0_p

tan_real_n_2_0_4_n:
	ucomisd	xmm0,qword ptr real_n_pi_p_1_04[rip]
	subsd	xmm1,xmm0
	ja		tan_real_s_2_n
	jmp		tan_real_2_0_n

tan_real_n_2_0_2_n:
	ucomisd	xmm0,qword ptr real_n_pi_m_1_04[rip]
	subsd	xmm1,xmm0
	jb		tan_real_s_2_p
	jmp		tan_real_2_0_p

tan_real_2_0_2_p:
	ucomisd	xmm0,qword ptr real_pi_p_1_04[rip]
	subsd	xmm1,xmm0
	jb		tan_real_s_2_p

tan_real_2_0_p:
	movlpd	xmm0,qword ptr real_h_pi_m_atan_2_52[rip]
	movlpd	xmm2,qword ptr real_h_pi_m_atan_2_52_l[rip]
	movlpd	xmm10,qword ptr real_48_bits[rip]

	subsd	xmm0,xmm1				# (0.5pi-atan 2)_h-x_h
	subsd	xmm2,xmm12				# (0.5pi-atan 2)_l-x_l
	andpd	xmm10,xmm1				# x_h

	movlpd	xmm11,qword ptr real_m_5_0[rip]
	addsd	xmm2,xmm0				# y=0.5pi-atan 2-x
	subsd	xmm1,xmm10				# x_h_l
	mulsd	xmm10,xmm11				# -5x_h

	movsd	xmm0,xmm2				# y
	mulsd	xmm2,xmm2				# y2

	addsd	xmm1,xmm12				# x_h_l+x_l
	addsd	xmm10,qword ptr real_2_p_2_5_pi_m_5_atan_2_53[rip] # -5x+(2+2.5pi-5atan 2)=2+5y

	movlpd	xmm12,qword ptr real_2_p_2_5_pi_m_5_atan_2_53_l[rip]
	movlpd	xmm13,qword ptr real_5_0[rip]
	jmp		tan_real_2_0_pn

tan_real_2_0_4_n:
	ucomisd	xmm0,qword ptr real_2pi_m_1_04[rip]
	subsd	xmm1,xmm0
	ja		tan_real_s_2_n
	jmp		tan_real_2_0_n

tan_real_2_0_2_n:
	ucomisd	xmm0,qword ptr real_pi_m_1_04[rip]
	subsd	xmm1,xmm0
	ja		tan_real_s_2_n

tan_real_2_0_n:
	movlpd	xmm0,qword ptr real_h_pi_m_atan_2_52[rip]
	movlpd	xmm2,qword ptr real_h_pi_m_atan_2_52_l[rip]
	movlpd	xmm10,qword ptr real_48_bits[rip]

	addsd	xmm0,xmm1				# (0.5pi-atan 2)_h+x_h
	addsd	xmm2,xmm12				# (0.5pi-atan 2)_l+x_l
	andpd	xmm10,xmm1				# x_h

	movlpd	xmm11,qword ptr real_m_5_0[rip]
	addsd	xmm2,xmm0				# y=0.5pi-atan 2+x
	subsd	xmm1,xmm10				# x_h_l
	mulsd	xmm10,xmm11				# -5x_h
	
	movsd	xmm0,xmm2				# y
	mulsd	xmm2,xmm2				# y2

	addsd	xmm1,xmm12				# x_h_l+x_l
	subsd	xmm10,qword ptr real_2_p_2_5_pi_m_5_atan_2_53[rip] # -5x-(2+2.5pi-5atan 2)=-2-5y

	movlpd	xmm12,qword ptr real_5_atan_2_m_2_m_2_5_pi_53_l[rip]
	movlpd	xmm13,qword ptr real_m_5_0[rip]

tan_real_2_0_pn:
	movlpd	xmm7,qword ptr tan3_q_1[rip]
	movlpd	xmm6,qword ptr tan3_q_2[rip]

	movsd	xmm3,xmm2				# y2
	mulsd	xmm2,xmm2				# y4

	movlpd	xmm9,qword ptr tan3_q_3[rip]
	mulsd	xmm7,xmm3				# q2

	movsd	xmm4,xmm3				# y2
	mulsd	xmm3,xmm2				# y6

	movlpd	xmm8,qword ptr tan3_p_0[rip]

	movsd	xmm5,xmm2				# y4
	mulsd	xmm2,xmm2				# y8

	mulsd	xmm9,xmm3				# q6
	mulsd	xmm3,qword ptr tan3_p_2[rip]	# p6

	mulsd	xmm6,xmm5				# q4
	mulsd	xmm5,qword ptr tan3_p_1[rip]	# p4
	
	addsd	xmm2,xmm9				# y8+q6

	mulsd	xmm8,xmm4				# p2

	addsd	xmm2,xmm6				# y8+q6+q4

	movlpd	xmm6,qword ptr real_2_0[rip]
	mulsd	xmm1,xmm11				# -5x_l

	addsd	xmm3,xmm5				# p6+p4
	addsd	xmm2,xmm7				# y8+q6+q4+q2

	mulsd	xmm6,xmm0				# 2*y

	addsd	xmm3,xmm8				# p6+p4+p2
	addsd	xmm2,qword ptr tan3_q_0[rip]	# y8+q6+q4+q2+q0

	movsd	xmm4,xmm3				# p
	addsd	xmm4,xmm2				# p+q
	
	mulsd	xmm4,xmm6				# 2*y*(p+q)

	addsd	xmm3,xmm4				# p+y*(p+q)
	subsd	xmm2,xmm4				# q-y*(p+q)

	divsd	xmm3,xmm2				# (p-y*(p+q))/(q+y*(p+q))

	addsd	xmm1,xmm12
		
	mulsd	xmm0,xmm3				# y * (p-y*(p+q))/(q+y*(p+q))

	mulsd	xmm0,xmm13				# -5*y*..

	addsd	xmm0,xmm1

	addsd	xmm0,xmm10				# -2-5*y-5*y * ..

	ret

tan_real_s_2_p:
	movlpd	xmm0,qword ptr real_h_pi_m_atan_s_2_53[rip]
	movlpd	xmm2,qword ptr real_h_pi_m_atan_s_2_53_l[rip]
	movlpd	xmm10,qword ptr real_49_bits[rip]

	subsd	xmm0,xmm1				# (0.5pi-atan sqrt 2)_h-x_h
	subsd	xmm2,xmm12				# (0.5pi-atan sqrt 2)_l-x_l
	andpd	xmm10,xmm1				# x_h

	movlpd	xmm11,qword ptr real_m_3_0[rip]
	addsd	xmm2,xmm0				# y=0.5pi-atan 2+x
	subsd	xmm1,xmm10				# x_h_l
	mulsd	xmm10,xmm11				# -3x_h
	
	movsd	xmm0,xmm2				# y
	mulsd	xmm2,xmm2				# y2

	addsd	xmm1,xmm12				# x_h_l+x_l
	addsd	xmm10,qword ptr real_sqrt_2_p_1_5_pi_m_3_atan_sqrt_2_53[rip] # -3x+(2+2.5pi-5atan 2)=sqrt 2+3y

	movlpd	xmm12,qword ptr real_sqrt_2_p_1_5_pi_m_3_atan_sqrt_2_53_l[rip]
	movlpd	xmm13,qword ptr real_3_0[rip]
	jmp		tan_real_s_2_pn

tan_real_s_2_n:
	movlpd	xmm0,qword ptr real_h_pi_m_atan_s_2_53[rip]
	movlpd	xmm2,qword ptr real_h_pi_m_atan_s_2_53_l[rip]
	movlpd	xmm10,qword ptr real_49_bits[rip]

	addsd	xmm0,xmm1				# (0.5pi-atan sqrt 2)_h+x
	addsd	xmm2,xmm12				# (0.5pi-atan sqrt 2)_l+x_l
	andpd	xmm10,xmm1				# x_h

	movlpd	xmm11,qword ptr real_m_3_0[rip]
	addsd	xmm2,xmm0				# y=0.5pi-atan 2+x
	subsd	xmm1,xmm10				# x_h_l
	mulsd	xmm10,xmm11				# -3x_h
	
	movsd	xmm0,xmm2				# y
	mulsd	xmm2,xmm2				# y2

	addsd	xmm1,xmm12				# x_h_l+x_l
	subsd	xmm10,qword ptr real_sqrt_2_p_1_5_pi_m_3_atan_sqrt_2_53[rip] # -3x-(2+2.5pi-5atan 2)=-sqrt 2-3y

	movlpd	xmm12,qword ptr real_3_atan_sqrt_2_m_sqrt_2_m_1_5_pi_m_53_l[rip]
	movlpd	xmm13,qword ptr real_m_3_0[rip]

tan_real_s_2_pn:
	movlpd	xmm7,qword ptr tan3_q_1[rip]
	movlpd	xmm6,qword ptr tan3_q_2[rip]

	movsd	xmm3,xmm2				# y2
	mulsd	xmm2,xmm2				# y4

	movlpd	xmm9,qword ptr tan3_q_3[rip]
	mulsd	xmm7,xmm3				# q2

	movsd	xmm4,xmm3				# y2
	mulsd	xmm3,xmm2				# y6

	movlpd	xmm8,qword ptr tan3_p_0[rip]

	movsd	xmm5,xmm2				# y4
	mulsd	xmm2,xmm2				# y8

	mulsd	xmm9,xmm3				# q6
	mulsd	xmm3,qword ptr tan3_p_2[rip]	# p6

	mulsd	xmm6,xmm5				# q4
	mulsd	xmm5,qword ptr tan3_p_1[rip]	# p4
	
	addsd	xmm2,xmm9				# y8+q6

	mulsd	xmm8,xmm4				# p2

	addsd	xmm2,xmm6				# y8+q6+q4

	movlpd	xmm6,qword ptr sqrt_2_0[rip]
	mulsd	xmm1,xmm11				# -3x_l

	addsd	xmm3,xmm5				# p6+p4
	addsd	xmm2,xmm7				# y8+q6+q4+q2

	mulsd	xmm6,xmm0				# sqrt 2*y

	addsd	xmm3,xmm8				# p6+p4+p2
	addsd	xmm2,qword ptr tan3_q_0[rip]	# y8+q6+q4+q2+q0

	movsd	xmm4,xmm3				# p
	addsd	xmm4,xmm2				# p+q
	
	mulsd	xmm4,xmm6				# sqrt 2*y*(p+q)
	mulsd	xmm0,xmm13				# -3*y

	addsd	xmm3,xmm4				# p+sqrt 2*y*(p+q)
	subsd	xmm2,xmm4				# q-sqrt 2*y*(p+q)

	divsd	xmm3,xmm2				# (p-y*(p+q))/(q+y*(p+q))

	addsd	xmm1,xmm12
	
	mulsd	xmm0,xmm3				# -3*y * (p-y*(p+q))/(q+y*(p+q))

	addsd	xmm0,xmm1

	addsd	xmm0,xmm10				# -sqrt 2-3*y-3*y * ..

	ret

tan_real_1_0_2:
	subsd	xmm1,xmm0

tan_real_1_0_n:
	movlpd	xmm0,qword ptr real_m_pi_d_4[rip]
	movlpd	xmm2,qword ptr real_m_pi_d_4_l[rip]

	subsd	xmm0,xmm1				# -(pi/4)_h-x_h
	subsd	xmm2,xmm12				# -(pi/4)_l-x_l
	mulsd	xmm1,qword ptr real_m_2_0[rip] # -2x

	addsd	xmm2,xmm0				# y=-pi/4-x
	addsd	xmm12,xmm12				# 2x_l
	subsd	xmm1,qword ptr real_pi_d_2_p_1_0[rip] # -2x-(pi/2+1)=-1-2y

	movlpd	xmm10,qword ptr real_pi_d_2_p_1_0_l[rip]
	movlpd	xmm11,qword ptr real_2_0[rip]
	jmp		tan_real_1_0_pn

tan_real_n_1_0_2:
	subsd	xmm1,xmm0

tan_real_1_0_2_p:
	movlpd	xmm0,qword ptr real_m_pi_d_4[rip]
	movlpd	xmm2,qword ptr real_m_pi_d_4_l[rip]
	movlpd	xmm11,qword ptr real_m_2_0[rip]

	addsd	xmm0,xmm1				# -(pi/4)_h+x_h
	addsd	xmm2,xmm12				# -(pi/4)_l+x_l
	mulsd	xmm1,xmm11				# -2x

	addsd	xmm2,xmm0				# y=pi/4-x
	addsd	xmm12,xmm12				# 2x_l
	addsd	xmm1,qword ptr real_pi_d_2_p_1_0[rip] # (pi/2+1)-2x-=1+2y

	movlpd	xmm10,qword ptr real_m_pi_d_2_p_1_0_l[rip]
	jmp		tan_real_1_0_pn

tan_real_n_5:
	ucomisd	xmm0,qword ptr real_n_2pi_m_0_338[rip]
	movlpd	xmm12,qword ptr real_m_2_pi_l[rip]
	movlpd	xmm1,qword ptr real_2_pi[rip]
	ja		tan_real_n_s_0_5_5_p
	ucomisd	xmm0,qword ptr real_n_2pi_p_0_338[rip]
	ja		tan_real_5_n
	ucomisd	xmm0,qword ptr real_n_2pi_p_0_699[rip]
	ja		tan_real_n_s_0_5_5_n
	addsd	xmm0,xmm1
	jmp		tan_real_1_0_3_n

tan_real_5:
	ucomisd	xmm0,qword ptr real_2pi_m_0_338[rip]
	movlpd	xmm12,qword ptr real_2_pi_l[rip]
	movlpd	xmm1,qword ptr real_2_pi[rip]
	jb		tan_real_s_0_5_5
	ucomisd	xmm0,qword ptr real_2pi_p_0_338[rip]
	jb		tan_real_5_0
	ucomisd	xmm0,qword ptr real_2pi_p_0_699[rip]
	jb		tan_real_s_0_5_5_p
	subsd	xmm0,xmm1
	jmp		tan_real_1_0_3

tan_real_n_3:
	ucomisd	xmm0,qword ptr real_n_pi_m_0_338[rip]
	movlpd	xmm12,qword ptr real_m_pi_l[rip]
	movlpd	xmm1,qword ptr real_pi[rip]
	ja		tan_real_n_s_0_5_3_p
	ucomisd	xmm0,qword ptr real_n_pi_p_0_338[rip]
	ja		tan_real_3_n
	ucomisd	xmm0,qword ptr real_n_pi_p_0_699[rip]
	ja		tan_real_n_s_0_5_3_n
	addsd	xmm0,xmm1
	jmp		tan_real_1_0_3_n

tan_real_3:
	ucomisd	xmm0,qword ptr real_pi_m_0_338[rip]
	movlpd	xmm1,qword ptr real_pi[rip]
	movlpd	xmm12,qword ptr real_pi_l[rip]
	jb		tan_real_s_0_5_3
	ucomisd	xmm0,qword ptr real_pi_p_0_338[rip]
	jb		tan_real_3_0
	ucomisd	xmm0,qword ptr real_pi_p_0_699[rip]
	jb		tan_real_s_0_5_3_p
	subsd	xmm0,xmm1
	jmp		tan_real_1_0_3

tan_real_5_n:
tan_real_3_n:
	addsd	xmm0,xmm1
	jmp		tan_real_3_

tan_real_5_0:
tan_real_3_0:
	subsd	xmm0,xmm1

tan_real_3_:
	movlpd	xmm2,qword ptr real_26_bits[rip]

	andpd	xmm2,xmm0				# y_1_h
	movsd	xmm1,xmm0				# y_1

	subsd	xmm1,xmm12				# y
	movsd	xmm8,xmm0				# y_1
	subsd	xmm0,xmm2				# y_1-y_1_h

	movsd	xmm3,xmm2				# y_1_h
	addsd	xmm2,xmm1				# y+y_1_h
	subsd	xmm0,xmm12				# y_1_l

	mulsd	xmm3,xmm3				# y_1_h^2
	mulsd	xmm0,xmm2				# (y+y_1_h)*y_1_l

	addsd	xmm0,xmm3				# y^2

	subsd	xmm8,xmm1				# y_1-y

	movlpd	xmm6,qword ptr tan_q_1[rip]
	movlpd	xmm5,qword ptr tan_q_2[rip]

	subsd	xmm8,xmm12				# y_s

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	movlpd	xmm7,qword ptr tan_p_1[rip]
	mulsd	xmm6,xmm2				# q2

	movsd	xmm3,xmm2				# x2
	mulsd	xmm2,xmm0				# x6

	movsd	xmm4,xmm0				# x4
	mulsd	xmm0,xmm0				# x8

	mulsd	xmm5,xmm4				# q4
	mulsd	xmm2,qword ptr tan_q_3[rip]	# q6
	
	mulsd	xmm4,qword ptr tan_p_2[rip]	# p4

	addsd	xmm0,xmm2				# x8+q6

	mulsd	xmm7,xmm3				# p2

	addsd	xmm0,xmm5				# x8+q6+q4

	addsd	xmm4,xmm7				# p4+p2

	addsd	xmm0,xmm6				# x8+q6+q4+q2

	addsd	xmm4,qword ptr tan_p_0[rip]	# p4+p2+p0

	addsd	xmm0,qword ptr tan_q_0[rip]	# x8+q6+q4+q2+q0

	divsd	xmm4,xmm0				# p/q

	mulsd	xmm3,xmm1				# x3	
	movsd	xmm0,xmm1				# x

#	movlpd	xmm2,qword ptr real_0_125

	mulsd	xmm3,xmm4
	
#	ucomisd	xmm3,xmm2
#	jae		tan_real_3_1

	addsd	xmm3,xmm8

	addsd	xmm0,xmm3

	ret

#tan_real_3_1:
#	subsd	xmm3,xmm2
#	addsd	xmm0,xmm2

#	addsd	xmm3,xmm8

#	addsd	xmm0,xmm3

#	ret

tan_real_1_0_3:
	movlpd	xmm1,qword ptr real_pi_d_4[rip]
	movlpd	xmm2,qword ptr real_pi_d_4_l[rip]

	subsd	xmm1,xmm0				# (pi/4)_h-x
	addsd	xmm2,xmm12				# (pi/4)_l+n_x_l
	mulsd	xmm0,qword ptr real_2_0[rip] # 2x

	addsd	xmm2,xmm1				# y=pi/4-x
	movlpd	xmm1,qword ptr real_1_0_m_pi_d_2_52[rip]
	addsd	xmm12,xmm12				# 2n_x_l
	addsd	xmm1,xmm0				# 2x+(1-pi/2)=1-2y

	movlpd	xmm11,qword ptr real_m_2_0[rip]
	movlpd	xmm10,qword ptr real_pi_d_2_m_1_0_52_l[rip]

	jmp		tan_real_1_0_pn

tan_real_1_0_3_n:
	movlpd	xmm1,qword ptr real_pi_d_4[rip]
	movlpd	xmm2,qword ptr real_pi_d_4_l[rip]

	addsd	xmm1,xmm0
	subsd	xmm2,xmm12				# (pi/4)_l-n_x_l
	mulsd	xmm0,qword ptr real_2_0[rip] # 2x

	addsd	xmm2,xmm1				# y=pi/4+x
	movlpd	xmm1,qword ptr real_pi_d_2_m_1_0_52[rip]
	addsd	xmm12,xmm12				# 2n_x_l
	addsd	xmm1,xmm0				# 2x+(pi/2-1)=-1+2y

	movlpd	xmm11,qword ptr real_2_0[rip]
	movlpd	xmm10,qword ptr real_m_pi_d_2_m_1_0_52_l[rip]

tan_real_1_0_pn:
	movsd	xmm0,xmm2				# y
	mulsd	xmm2,xmm2				# y2

	movlpd	xmm7,qword ptr tan3_q_1[rip]
	movlpd	xmm6,qword ptr tan3_q_2[rip]

	movsd	xmm3,xmm2				# y2
	mulsd	xmm2,xmm2				# y4

	movlpd	xmm9,qword ptr tan3_q_3[rip]
	mulsd	xmm7,xmm3				# q2

	movsd	xmm4,xmm3				# y2
	mulsd	xmm3,xmm2				# y6

	movlpd	xmm8,qword ptr tan3_p_0[rip]

	movsd	xmm5,xmm2				# y4
	mulsd	xmm2,xmm2				# y8

	mulsd	xmm9,xmm3				# q6
	mulsd	xmm3,qword ptr tan3_p_2[rip]	# p6

	mulsd	xmm6,xmm5				# q4
	mulsd	xmm5,qword ptr tan3_p_1[rip]	# p4
	
	addsd	xmm2,xmm9				# y8+q6

	mulsd	xmm8,xmm4				# p2

	addsd	xmm2,xmm6				# y8+q6+q4

	addsd	xmm3,xmm5				# p6+p4
	addsd	xmm2,xmm7				# y8+q6+q4+q2

	addsd	xmm3,xmm8				# p6+p4+p2
	addsd	xmm2,qword ptr tan3_q_0[rip]	# y8+q6+q4+q2+q0

	movsd	xmm4,xmm3				# p
	addsd	xmm4,xmm2				# p+q

	mulsd	xmm4,xmm0				# y*(p+q)
	mulsd	xmm0,xmm11				# -2y | 2y

	subsd	xmm3,xmm4				# p-y*(p+q)
	addsd	xmm2,xmm4				# q+y*(p+q)

	divsd	xmm3,xmm2				# (p-y*(p+q))/(q+y*(p+q))

	addsd	xmm12,xmm10
	
	mulsd	xmm0,xmm3				# -2y * (p-y*(p+q))/(q+y*(p+q)) | 2y * (p-y*(p+q))/(q+y*(p+q))

	subsd	xmm0,xmm12

	addsd	xmm0,xmm1				# 1-2y-2y * .. | -1+2y+2y * ..

	ret

tan_real_n_s_0_5_5_p:
	ucomisd	xmm0,qword ptr real_n_2pi_m_0_542[rip]
	addsd	xmm0,xmm1
	jb		tan_real_0_5_p
	jmp		tan_real_s_0_5_p

tan_real_s_0_5_5_p:
	ucomisd	xmm0,qword ptr real_2pi_p_0_542[rip]
	subsd	xmm0,xmm1
	jb		tan_real_0_5_p
	jmp		tan_real_s_0_5_p

tan_real_n_s_0_5_3_p:
	ucomisd	xmm0,qword ptr real_n_pi_m_0_542[rip]
	addsd	xmm0,xmm1
	jb		tan_real_0_5_p
	jmp		tan_real_s_0_5_p

tan_real_s_0_5_3_p:
	ucomisd	xmm0,qword ptr real_pi_p_0_542[rip]
	subsd	xmm0,xmm1
	jb		tan_real_0_5_p

tan_real_s_0_5_p:
	movlpd	xmm1,qword ptr atan_sqrt_0_5[rip]
	movlpd	xmm2,qword ptr atan_sqrt_0_5_l[rip]
	movlpd	xmm10,qword ptr real_51_bits[rip]

	subsd	xmm1,xmm0				# atan sqrt 0.5_h-x
	addsd	xmm2,xmm12				# atan sqrt 0.5_l+n_x_l
	andpd	xmm10,xmm0				# x_h

	movlpd	xmm11,qword ptr real_1_5[rip]
	addsd	xmm2,xmm1				# y=atan sqrt 0.5-x
	subsd	xmm0,xmm10				# x_h_l
	mulsd	xmm10,xmm11				# 1.5x_h

	movsd	xmm1,xmm2				# y
	mulsd	xmm2,xmm2				# y2

	subsd	xmm0,xmm12				# x_h_l-n_x_l
	addsd	xmm10,qword ptr sqrtn_0_5_m_1_5_atann_sqrt_0_5[rip] # 1.5x+(sqrt 0.5-1.5atan sqrt 0.5)=sqrt 0.5+1.5y

	movlpd	xmm12,qword ptr sqrtn_0_5_m_1_5_atann_sqrt_0_5_l[rip]
	movlpd	xmm13,qword ptr real_m_1_5[rip]
	movlpd	xmm14,qword ptr sqrt_0_5[rip]
	jmp		tan_real_0_5_a_s_0_5_3_pn

tan_real_n_s_0_5_5_n:
	ucomisd	xmm0,qword ptr real_n_2pi_p_0_542[rip]
	addsd	xmm0,xmm1
	ja		tan_real_0_5_n
	jmp		tan_real_s_0_5_n

tan_real_s_0_5_5:
	ucomisd	xmm0,qword ptr real_2pi_m_0_542[rip]
	subsd	xmm0,xmm1
	ja		tan_real_0_5_n
	jmp		tan_real_s_0_5_n

tan_real_n_s_0_5_3_n:
	ucomisd	xmm0,qword ptr real_n_pi_p_0_542[rip]
	addsd	xmm0,xmm1
	ja		tan_real_0_5_n
	jmp		tan_real_s_0_5_n

tan_real_s_0_5_3:
	ucomisd	xmm0,qword ptr real_pi_m_0_542[rip]
	subsd	xmm0,xmm1
	ja		tan_real_0_5_n

tan_real_s_0_5_n:
	movlpd	xmm1,qword ptr atan_sqrt_0_5[rip]
	movlpd	xmm2,qword ptr atan_sqrt_0_5_l[rip]
	movlpd	xmm10,qword ptr real_51_bits[rip]

	addsd	xmm1,xmm0				# x_h+atan sqrt 0.5_h
	subsd	xmm2,xmm12				# -n_x_l+atan sqrt 0.5_l
	andpd	xmm10,xmm0				# x_h

	movlpd	xmm11,qword ptr real_1_5[rip]
	addsd	xmm2,xmm1				# y=x+atan sqrt 0.5
	subsd	xmm0,xmm10				# x_h_l
	mulsd	xmm10,xmm11				# 1.5x_h

	movsd	xmm1,xmm2				# y
	mulsd	xmm2,xmm2				# y2

	subsd	xmm0,xmm12				# x_h_l-n_x_l
	subsd	xmm10,qword ptr sqrtn_0_5_m_1_5_atann_sqrt_0_5[rip] # 1.5x-(sqrt 0.5-1.5atan sqrt 0.5)=-sqrt 0.5+1.5y

	movlpd	xmm12,qword ptr n_sqrtn_0_5_m_1_5_atann_sqrt_0_5_l[rip]
	movlpd	xmm13,qword ptr real_1_5[rip]
	movlpd	xmm14,qword ptr sqrt_0_5[rip]

tan_real_0_5_a_s_0_5_3_pn:
	movlpd	xmm7,qword ptr tan3_q_1[rip]
	movlpd	xmm6,qword ptr tan3_q_2[rip]

	movsd	xmm3,xmm2				# y2
	mulsd	xmm2,xmm2				# y4

	movlpd	xmm9,qword ptr tan3_q_3[rip]
	mulsd	xmm7,xmm3				# q2

	movsd	xmm4,xmm3				# y2
	mulsd	xmm3,xmm2				# y6

	movlpd	xmm8,qword ptr tan3_p_0[rip]

	movsd	xmm5,xmm2				# y4
	mulsd	xmm2,xmm2				# y8

	mulsd	xmm9,xmm3				# q6
	mulsd	xmm3,qword ptr tan3_p_2[rip]	# p6

	mulsd	xmm6,xmm5				# q4
	mulsd	xmm5,qword ptr tan3_p_1[rip]	# p4
	
	addsd	xmm2,xmm9				# y8+q6

	mulsd	xmm8,xmm4				# p2

	addsd	xmm2,xmm6				# y8+q6+q4

	mulsd	xmm0,xmm11				# 1.25|1.5x_l

	addsd	xmm3,xmm5				# p6+p4
	addsd	xmm2,xmm7				# y8+q6+q4+q2

	mulsd	xmm14,xmm1				# 0.5|sqrt 0.5*y

	addsd	xmm3,xmm8				# p6+p4+p2
	addsd	xmm2,qword ptr tan3_q_0[rip]	# y8+q6+q4+q2+q0

	movsd	xmm4,xmm3				# p
	addsd	xmm4,xmm2				# p+q

	mulsd	xmm4,xmm14				# 0.5|sqrt 0.5*y*(p+q)

	subsd	xmm3,xmm4				# p-sqrt 0.5*y*(p+q)
	addsd	xmm2,xmm4				# q+sqrt 0.5*y*(p+q)

	divsd	xmm3,xmm2				# (p-y*(p+q))/(q+y*(p+q))

	addsd	xmm0,xmm12
	
	mulsd	xmm1,xmm3				# y * (p-y*(p+q))/(q+y*(p+q))

	mulsd	xmm1,xmm13				# 1.25|1.5*y*..

	addsd	xmm0,xmm1

	addsd	xmm0,xmm10				# 0.5|sqrt 0.5+1.25|1.5*y+1.25|1.5*y * ..

	ret

tan_real_0_5_p:
	movlpd	xmm1,qword ptr atan_0_5_53[rip]
	movlpd	xmm2,qword ptr atan_0_5_53_l[rip]
	movlpd	xmm10,qword ptr real_50_bits[rip]

	subsd	xmm1,xmm0				# atan 0.5_h-x
	addsd	xmm2,xmm12				# atan 0.5_l-n_x_l
	andpd	xmm10,xmm0				# x_h

	movlpd	xmm11,qword ptr real_1_25[rip]
	addsd	xmm2,xmm1				# y=x+atan 0.5
	subsd	xmm0,xmm10				# x_h_l
	mulsd	xmm10,xmm11				# 1.25x_h

	movsd	xmm1,xmm2				# y
	mulsd	xmm2,xmm2				# y2

	subsd	xmm0,xmm12				# x_h_l-n_x_l
	addsd	xmm10,qword ptr real_0_5_m_1_25_atan_0_5_49[rip] # 1.25x+(0.5-1.25atan 0.5)=0.5+1.25y

	movlpd	xmm12,qword ptr real_0_5_m_1_25_atan_0_5_49_l[rip]
	movlpd	xmm13,qword ptr real_m_1_25[rip]
	movlpd	xmm14,qword ptr real_0_5[rip]
	jmp		tan_real_0_5_a_s_0_5_3_pn

tan_real_0_5_n:
	movlpd	xmm1,qword ptr atan_0_5_53[rip]
	movlpd	xmm2,qword ptr atan_0_5_53_l[rip]
	movlpd	xmm10,qword ptr real_50_bits[rip]

	addsd	xmm1,xmm0				# x_h+atan 0.5_h
	subsd	xmm2,xmm12				# -n_x_l+atan 0.5_l
	andpd	xmm10,xmm0				# x_h

	movlpd	xmm11,qword ptr real_1_25[rip]
	addsd	xmm2,xmm1				# y=x+atan 0.5
	subsd	xmm0,xmm10				# x_h_l
	mulsd	xmm10,xmm11				# 1.25x_h

	movsd	xmm1,xmm2				# y
	mulsd	xmm2,xmm2				# y2

	subsd	xmm0,xmm12				# x_h_l-n_x_l
	subsd	xmm10,qword ptr real_0_5_m_1_25_atan_0_5_49[rip] # 1.25x-(0.5-1.25atan 0.5)=-0.5+1.25y

	movlpd	xmm12,qword ptr real_1_25_atan_0_5_m_0_5_49_l[rip]
	movlpd	xmm13,qword ptr real_1_25[rip]
	movlpd	xmm14,qword ptr real_0_5[rip]
	jmp		tan_real_0_5_a_s_0_5_3_pn


sin_cos_or_tan_real_too_large:
sin_cos_or_tan_real_too_small_or_nan:
	subsd	xmm0,xmm0
	ret

rem_36825084_pi:
	movsd	xmm1,xmm0	
	divsd	xmm0,qword ptr real_36825084_pi[rip]
	
	movq	xmm4,qword ptr round_c[rip]
	movq	xmm2,xmm0
	psrlq	xmm0,52
	psubq	xmm4,xmm0
	movq	xmm5,qword ptr mask_all_one[rip]
	psllq	xmm5,xmm4
	andpd	xmm5,xmm2
	
	movlpd	xmm2,qword ptr real_36825084_pi_27[rip]
	movlpd	xmm3,qword ptr real_36825084_pi_27_27[rip]
	movlpd	xmm4,qword ptr real_36825084_pi_54_l[rip]

	movsd	xmm0,xmm1

	mulsd	xmm2,xmm5
	mulsd	xmm3,xmm5
	mulsd	xmm4,xmm5

	subsd	xmm0,xmm2
	subsd	xmm0,xmm3
	movsd	xmm7,xmm0	
	subsd	xmm0,xmm4

	subsd	xmm7,xmm0
	subsd	xmm7,xmm4

	movlpd	xmm1,qword ptr real_4_d_pi[rip]

	mulsd	xmm1,xmm0				# x*4/pi

	ucomisd	xmm1,qword ptr real_3_0[rip]
	jae		rem_36825084_pi_g3

	ucomisd	xmm1,qword ptr real_1_0[rip]
	jae		rem_36825084_pi_g1

	movlpd	xmm1,qword ptr real_0_0[rip]
	movsd	xmm5,xmm1
	movsd	xmm6,xmm1
	ret

rem_36825084_pi_g1:
	movlpd	xmm1,qword ptr real_2_0[rip]
	movlpd	xmm5,qword ptr real_0_0[rip]
	movsd	xmm6,xmm1
	ret

rem_36825084_pi_g3:
	addsd	xmm1,qword ptr real_1_0[rip]	# x*4/pi+1
	
	movq	xmm4,qword ptr round_even_c[rip]
	movq	xmm2,xmm1
	psrlq	xmm1,52
	psubq	xmm4,xmm1
	movq	xmm1,qword ptr mask_all_one[rip]
	psllq	xmm1,xmm4
	andpd	xmm1,xmm2				# round_even (x*4/pi+1)

	movq	xmm5,qword ptr mask_all_one_except_last[rip]
	movq	xmm6,qword ptr mask_all_one_except_second_last[rip]
	psllq	xmm5,xmm4
	psllq	xmm6,xmm4
	ret

rem_n_36825084_pi:
	movsd	xmm1,xmm0	
	divsd	xmm0,qword ptr real_36825084_pi[rip]
	
	movq	xmm4,qword ptr m_round_c[rip]
	movq	xmm2,xmm0
	psrlq	xmm0,52
	psubq	xmm4,xmm0
	movq	xmm5,qword ptr mask_all_one[rip]
	psllq	xmm5,xmm4
	andpd	xmm5,xmm2
	
	movlpd	xmm2,qword ptr real_36825084_pi_27[rip]
	movlpd	xmm3,qword ptr real_36825084_pi_27_27[rip]
	movlpd	xmm4,qword ptr real_36825084_pi_54_l[rip]

	movsd	xmm0,xmm1

	mulsd	xmm2,xmm5
	mulsd	xmm3,xmm5
	mulsd	xmm4,xmm5

	subsd	xmm0,xmm2
	subsd	xmm0,xmm3
	movsd	xmm7,xmm0	
	subsd	xmm0,xmm4

	subsd	xmm7,xmm0
	subsd	xmm7,xmm4

	movlpd	xmm1,qword ptr real_4_d_pi[rip]

	mulsd	xmm1,xmm0				# x*4/pi

	ucomisd	xmm1,qword ptr real_m_3_0[rip]
	jbe		rem_n_36825084_pi_g3

	ucomisd	xmm1,qword ptr real_m_1_0[rip]
	jbe		rem_n_36825084_pi_g1

	movlpd	xmm1,qword ptr real_0_0[rip]
	movsd	xmm5,xmm1
	movsd	xmm6,xmm1
	ret

rem_n_36825084_pi_g1:
	movlpd	xmm1,qword ptr real_m_2_0[rip]
	movlpd	xmm5,qword ptr real_0_0[rip]
	movsd	xmm6,xmm1
	ret
	
rem_n_36825084_pi_g3:
	subsd	xmm1,qword ptr real_1_0[rip]	# x*4/pi-1
	
	movq	xmm4,qword ptr m_round_even_c[rip]
	movq	xmm2,xmm1
	psrlq	xmm1,52
	psubq	xmm4,xmm1
	movq	xmm1,qword ptr mask_all_one[rip]
	psllq	xmm1,xmm4
	andpd	xmm1,xmm2				# round_even (x*4/pi-1)

	movq	xmm5,qword ptr mask_all_one_except_last[rip]
	movq	xmm6,qword ptr mask_all_one_except_second_last[rip]
	psllq	xmm5,xmm4
	psllq	xmm6,xmm4
	ret


	.global	asin_real

asin_real:
	ucomisd	xmm0,qword ptr real_0_4[rip]

	lea		rcx,asin_c[rip]

	ja		asin_real_2

	ucomisd	xmm0,qword ptr real_m_0_4[rip]
	jb		asin_real_3				# x<0.55 | NAN

	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	movlpd	xmm6,qword ptr (asin_q_4-asin_c)[rcx]
	movlpd	xmm7,qword ptr (asin_q_3-asin_c)[rcx]

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	movlpd	xmm8,qword ptr (asin_q_2-asin_c)[rcx]
	movlpd	xmm9,qword ptr (asin_q_1-asin_c)[rcx]

	movsd	xmm4,xmm0				# x4
	mulsd	xmm0,xmm0				# x8

	movlpd	xmm10,qword ptr (asin_p_1-asin_c)[rcx]

	movsd	xmm3,xmm2				# x2
	mulsd	xmm3,xmm4				# x6

	mulsd	xmm6,xmm0				# q8
	movsd	xmm5,xmm0				# x8
	mulsd	xmm0,xmm2				# x10

	mulsd	xmm5,qword ptr (asin_p_4-asin_c)[rcx] # p8

	mulsd	xmm7,xmm3				# q6
	mulsd	xmm3,qword ptr (asin_p_3-asin_c)[rcx] # p6
	
	addsd	xmm0,xmm6				# x10+q8

	mulsd	xmm8,xmm4				# q4
	mulsd	xmm4,qword ptr (asin_p_2-asin_c)[rcx] # p4

	addsd	xmm0,xmm7				# x10+q8+q6
	addsd	xmm3,xmm5				# p8+p6

	mulsd	xmm9,xmm2				# q2
	mulsd	xmm10,xmm2				# p2

	addsd	xmm0,xmm8				# x10+q8+q6+q4
	addsd	xmm3,xmm4				# p8+p6+p4

	addsd	xmm0,xmm9				# x10+q8+q6+q4+q2
	addsd	xmm3,xmm10				# p8+p6+p4+p2

	addsd	xmm0,qword ptr (asin_q_0-asin_c)[rcx] # x10+q8+q6+q4+q2+q0
	addsd	xmm3,qword ptr (asin_p_0-asin_c)[rcx] # p8+p6+p4+p2+p0

	divsd	xmm3,xmm0				# p/q

	mulsd	xmm2,xmm1				# x3
	movsd	xmm0,xmm1				# x

	mulsd	xmm2,xmm3
	addsd	xmm0,xmm2

	ret

asin_real_2:
	ucomisd	xmm0,qword ptr real_0_675[rip]
	jb		asin_real_0_54

	movlpd	xmm1,qword ptr real_1_0[rip]

	ucomisd	xmm0,xmm1
	subsd	xmm1,xmm0

	jae		asin_real_1_or_e

	movlpd	xmm11,qword ptr real_2_0[rip]
	
	movsd	xmm0,xmm1					# x
	mulsd	xmm1,xmm1					# x2

	mulsd	xmm11,xmm0					# 2x

	movlpd	xmm7,qword ptr (asin2_q_3-asin_c)[rcx]

	movsd	xmm2,xmm1					# x2
	mulsd	xmm1,xmm1					# x4

	sqrtsd	xmm12,xmm11					# sqrt 2x

	movlpd	xmm5,qword ptr (asin2_p_3-asin_c)[rcx]
	movlpd	xmm8,qword ptr (asin2_q_2-asin_c)[rcx]

	movsd	xmm4,xmm1					# x4

	movlpd	xmm9,qword ptr (asin2_q_1-asin_c)[rcx]
	movlpd	xmm10,qword ptr (asin2_p_1-asin_c)[rcx]

	movsd	xmm3,xmm2					# x2
	mulsd	xmm3,xmm0					# x3

	mulsd	xmm4,qword ptr (asin2_p_4-asin_c)[rcx] # p4

	mulsd	xmm7,xmm3					# q3
	mulsd	xmm5,xmm3					# p3
	
	mulsd	xmm8,xmm2					# q2
	mulsd	xmm2,qword ptr (asin2_p_2-asin_c)[rcx] # p2

	addsd	xmm1,xmm7					# x4+q3
	addsd	xmm4,xmm5					# p4+p3

	mulsd	xmm9,xmm0					# q1
	mulsd	xmm10,xmm0					# p1

	addsd	xmm1,xmm8					# x5+q4+q3+q2
	addsd	xmm4,xmm2					# p4+p3+p2

	addsd	xmm1,xmm9					# x5+q4+q3+q2+q1
	addsd	xmm4,xmm10					# p4+p3+p2+p1

	movlpd	xmm13,qword ptr real_21_bits[rip]

	addsd	xmm1,qword ptr (asin2_q_0-asin_c)[rcx] # x5+q4+q3+q2+q1+q0
	addsd	xmm4,qword ptr (asin2_p_0-asin_c)[rcx] # p4+p3+p2+p1+p0

	andpd	xmm13,xmm12					# s21

	divsd	xmm4,xmm1					# p/q

	movsd	xmm14,xmm13					# s21
	movsd	xmm15,xmm12					# s
	addsd	xmm12,xmm13					# s+s21

	mulsd	xmm13,xmm13					# s21*s21
	subsd	xmm11,xmm13					# 2x-s21*s21
	divsd	xmm11,xmm12					# sl

	addsd	xmm14,qword ptr real_m_pi_d_2[rip]	# s21-pi_d_2
	mulsd	xmm4,xmm0					# x*p/q

	movlpd	xmm0,qword ptr real_pi_d_2_l[rip]
	subsd	xmm0,xmm11					# pi_d_2_l-sl

	mulsd	xmm4,xmm15					# s*x*p/q

	subsd	xmm0,xmm4					# pi_d_2_l-sl-s*x*p/q
	subsd	xmm0,xmm14					# pi_d_2_l-sl-s*x*p/q-s21+pi_d_2

	ret

asin_real_3:
	ucomisd	xmm0,qword ptr real_m_0_675[rip]
	ja		asin_real_m_0_54

	movlpd	xmm1,qword ptr real_m_1_0[rip]

	ucomisd	xmm0,xmm1
	jbe		asin_real_m_1_or_e			# x<=-1 | NAN

	subsd	xmm0,xmm1

	movlpd	xmm11,qword ptr real_2_0[rip]
	
	movsd	xmm1,xmm0					# x
	mulsd	xmm0,xmm0					# x2

	mulsd	xmm11,xmm1					# 2x

	movlpd	xmm7,qword ptr (asin2_q_3-asin_c)[rcx]

	movsd	xmm2,xmm0					# x2
	mulsd	xmm0,xmm0					# x4

	sqrtsd	xmm12,xmm11					# sqrt 2x

	movlpd	xmm5,qword ptr (asin2_p_3-asin_c)[rcx]
	movlpd	xmm8,qword ptr (asin2_q_2-asin_c)[rcx]

	movsd	xmm4,xmm0					# x4

	movlpd	xmm9,qword ptr (asin2_q_1-asin_c)[rcx]
	movlpd	xmm10,qword ptr (asin2_p_1-asin_c)[rcx]

	movsd	xmm3,xmm2					# x2
	mulsd	xmm3,xmm1					# x3

	mulsd	xmm4,qword ptr (asin2_p_4-asin_c)[rcx] # p4

	mulsd	xmm7,xmm3					# q3
	mulsd	xmm5,xmm3					# p3
	
	mulsd	xmm8,xmm2					# q2
	mulsd	xmm2,qword ptr (asin2_p_2-asin_c)[rcx] # p2

	addsd	xmm0,xmm7					# x4+q3
	addsd	xmm4,xmm5					# p4+p3

	mulsd	xmm9,xmm1					# q1
	mulsd	xmm10,xmm1					# p1

	addsd	xmm0,xmm8					# x5+q4+q3+q2
	addsd	xmm4,xmm2					# p4+p3+p2

	addsd	xmm0,xmm9					# x5+q4+q3+q2+q1
	addsd	xmm4,xmm10					# p4+p3+p2+p1

	movlpd	xmm13,qword ptr real_21_bits[rip]

	addsd	xmm0,qword ptr (asin2_q_0-asin_c)[rcx] # x5+q4+q3+q2+q1+q0
	addsd	xmm4,qword ptr (asin2_p_0-asin_c)[rcx] # p4+p3+p2+p1+p0

	andpd	xmm13,xmm12					# s21

	divsd	xmm4,xmm0					# p/q

	movsd	xmm14,xmm13					# s21
	movsd	xmm15,xmm12					# s
	addsd	xmm12,xmm13					# s+s21
	mulsd	xmm13,xmm13					# s21*s21
	subsd	xmm11,xmm13					# 2x-s21*s21
	divsd	xmm11,xmm12					# sl

	addsd	xmm14,qword ptr real_m_pi_d_2[rip]	# s21-pi_d_2
	mulsd	xmm4,xmm1					# x*p/q

	movlpd	xmm0,qword ptr real_m_pi_d_2_l[rip]
	addsd	xmm0,xmm11					# -pi_d_2_l+sl

	mulsd	xmm4,xmm15					# s*x*p/q

	addsd	xmm0,xmm4					# -pi_d_2_l+sl+s*x*p/q
	addsd	xmm0,xmm14					# -pi_d_2_l+sl+s*x*p/q+s21-pi_d_2

	ret

asin_real_m_0_54:
	movlpd	xmm1,qword ptr real_m_0_54000000017867999524[rip]

	ucomisd	xmm0,xmm1
	subsd	xmm0,xmm1

	lea		rcx,asin_p3_c[rip]
	lea		rdx,asin_p4_c[rip]

	cmova	rcx,rdx

	jmp		asin_real_pm_0_54

asin_real_0_54:
	movlpd	xmm1,qword ptr real_0_54000000017867999524[rip]

	ucomisd	xmm0,xmm1
	subsd	xmm0,xmm1

	lea		rcx,asin_p1_c[rip]
	lea		rdx,asin_p2_c[rip]

	cmovb	rcx,rdx

asin_real_pm_0_54:
	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	movlpd	xmm7,qword ptr (asin_p1_4-asin_p1_c)[rcx]
	movlpd	xmm8,qword ptr (asin_p1_3-asin_p1_c)[rcx]

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	mulsd	xmm7,xmm2				# p4
	mulsd	xmm8,xmm2				# p3

	movlpd	xmm9,qword ptr (asin_p1_6-asin_p1_c)[rcx]
	movlpd	xmm10,qword ptr (asin_p1_5-asin_p1_c)[rcx]

	movsd	xmm3,xmm2				# x2
	mulsd	xmm2,xmm0				# x6

	movsd	xmm4,xmm0				# x4
	mulsd	xmm0,xmm0				# x8
	
	mulsd	xmm9,xmm4				# p6
	mulsd	xmm10,xmm4				# p5

	movlpd	xmm11,qword ptr (asin_p1_8-asin_p1_c)[rcx]
	movlpd	xmm12,qword ptr (asin_p1_10-asin_p1_c)[rcx]

	mulsd	xmm4,xmm2				# x10

	movlpd	xmm13,qword ptr (asin_p1_12-asin_p1_c)[rcx]
	movlpd	xmm14,qword ptr (asin_p1_14-asin_p1_c)[rcx]

	movsd	xmm6,xmm2				# x6
	mulsd	xmm2,xmm2				# x12

	mulsd	xmm11,xmm6				# p8
	mulsd	xmm6,qword ptr (asin_p1_7-asin_p1_c)[rcx] # p7

	mulsd	xmm12,xmm0				# p10
	mulsd	xmm0,qword ptr (asin_p1_9-asin_p1_c)[rcx] # p9

	mulsd	xmm13,xmm4				# p12
	mulsd	xmm4,qword ptr (asin_p1_11-asin_p1_c)[rcx] # p11

	mulsd	xmm14,xmm2				# p14
	mulsd	xmm2,qword ptr (asin_p1_13-asin_p1_c)[rcx] # p13

	addsd	xmm13,xmm14				# p14+p12
	addsd	xmm2,xmm4				# p13+p11

	movlpd	xmm15,qword ptr (asin_p1_2-asin_p1_c)[rcx]
	
	addsd	xmm12,xmm13				# p14+p12+p10
	addsd	xmm0,xmm2				# p13+p11+p9

	mulsd	xmm15,xmm3				# p2
	
	addsd	xmm11,xmm12				# p14+p12+p10+p8
	addsd	xmm0,xmm6				# p13+p11+p9+p7

	movlpd	xmm2,qword ptr real_26_bits[rip]
	movsd	xmm4,xmm1				# x
	movlpd	xmm6,qword ptr (asin_p1_1l-asin_p1_c)[rcx]
	movlpd	xmm5,qword ptr (asin_p1_1h-asin_p1_c)[rcx]

	addsd	xmm9,xmm11				# p14+p12+p10+p8+p6
	addsd	xmm0,xmm10				# p13+p11+p9+p7+p5

	andpd	xmm2,xmm1				# x_h
	mulsd	xmm6,xmm1				# x*c1l
	movlpd	xmm13,qword ptr (asin_p1_0h-asin_p1_c)[rcx]

	addsd	xmm7,xmm9				# p14+p12+p10+p8+p6+p4
	addsd	xmm0,xmm8				# p13+p11+p9+p7+p5+p3

	subsd	xmm4,xmm2				# x_l
	mulsd	xmm2,xmm5				# x_h*c1h

	mulsd	xmm7,xmm3				# (p14+p12+p10+p8+p6+p4)(*x2)
	mulsd	xmm0,xmm1				# (p13+p11+p9+p7+p5+p3)(*x)

	movsd	xmm14,xmm13
	addsd	xmm13,xmm2				# x_h*c1h+c0h
	
	addsd	xmm0,xmm7				# p14+p13+..+p3

	subsd	xmm14,xmm13				# c0h-(x_h*c1h+c0h)
	mulsd	xmm4,xmm5				# x_l*c1h

	addsd	xmm0,xmm15				# p14+p13+..+p3+p2
#	addsd	xmm0,qword ptr (asin_p1_0l-asin_p1_c)[rcx]
	
	addsd	xmm14,xmm2				# (c0h-(x_h*c1h+c0h))+x_h*c1h
	addsd	xmm4,xmm6				# x_l*c1h+x*c1l
	
	addsd	xmm4,xmm14				# (c0h-(x_h*c1h+c0h))+x_h*c1h+x_l*c1h+x*c1l

	addsd	xmm0,xmm4
	addsd	xmm0,xmm13
	ret

asin_real_1_or_e:
	jne		asin_real_e

	movlpd	xmm0,qword ptr real_pi_d_2[rip]
	ret

asin_real_m_1_or_e:
	jb		asin_real_e					# NAN

	movlpd	xmm0,qword ptr real_m_pi_d_2[rip]
	ret

asin_real_e:
	subsd	xmm0,xmm0
	divsd	xmm0,xmm0
	ret


	.global	acos_real

acos_real:
#	ucomisd	xmm0,qword ptr real_0_58
	ucomisd	xmm0,qword ptr real_0_5[rip]
	ja		acos_real_2
	ucomisd	xmm0,qword ptr real_m_0_58[rip]
	jb		acos_real_3

	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	movlpd	xmm6,qword ptr acos_q_4[rip]
	movlpd	xmm7,qword ptr acos_q_3[rip]

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	movlpd	xmm8,qword ptr acos_q_2[rip]
	movlpd	xmm9,qword ptr acos_q_1[rip]

	movsd	xmm4,xmm0				# x4
	mulsd	xmm0,xmm0				# x8

	movlpd	xmm10,qword ptr acos_p_1[rip]

	movsd	xmm3,xmm2				# x2
	mulsd	xmm3,xmm4				# x6

	mulsd	xmm6,xmm0				# q8
	movsd	xmm5,xmm0				# x8
	mulsd	xmm0,xmm2				# x10

	mulsd	xmm5,qword ptr acos_p_4[rip]	# p8

	mulsd	xmm7,xmm3				# q6
	mulsd	xmm3,qword ptr acos_p_3[rip] # p6
	
	addsd	xmm0,xmm6				# x10+q8

	mulsd	xmm8,xmm4				# q4
	mulsd	xmm4,qword ptr acos_p_2[rip] # p4

	addsd	xmm0,xmm7				# x10+q8+q6
	addsd	xmm3,xmm5				# p8+p6

	mulsd	xmm9,xmm2				# q2
	mulsd	xmm10,xmm2				# p2

	addsd	xmm0,xmm8				# x10+q8+q6+q4
	addsd	xmm3,xmm4				# p8+p6+p4

	movlpd	xmm11,qword ptr real_21_bits[rip]

	addsd	xmm0,xmm9				# x10+q8+q6+q4+q2
	addsd	xmm3,xmm10				# p8+p6+p4+p2

	andpd	xmm11,xmm1				# x21

	addsd	xmm0,qword ptr acos_q_0[rip]	# x10+q8+q6+q4+q2+q0
	addsd	xmm3,qword ptr acos_p_0[rip] # p8+p6+p4+p2+p0

	mulsd	xmm2,xmm1				# x3

	divsd	xmm3,xmm0				# p/q

#	ucomisd	xmm1,qword ptr real_0_54
#	ja		acos_real_1

	movsd	xmm0,qword ptr real_pi_d_2[rip] # pi_d_2

	subsd	xmm1,xmm11				# x21_l
	subsd	xmm0,xmm11				# pi_d_2-x21

	mulsd	xmm2,xmm3				# x3*(p/q)

	addsd	xmm2,qword ptr real_m_pi_d_2_l[rip] # x3*(p/q)-pi_d_2_l
	
	addsd	xmm1,xmm2				# x21_l+x3*(p/q)-pi_d_2_l

	subsd	xmm0,xmm1				# pi_d_2-x21-x21_l-x3*(p/q)+pi_d_2_l
	
	ret

#acos_real_1:
#	movlpd	xmm0,qword ptr real_pi_d_2_m_0_03125

#	subsd	xmm1,xmm11				# x21_l
#	subsd	xmm0,xmm11				# pi_d_2-0.03125-x21

#	mulsd	xmm2,xmm3				# x3*(p/q)

#	addsd	xmm1,qword ptr real_m_pi_d_2_l # x21_l-pi_d_2_l
	
#	subsd	xmm2,qword ptr real_0_03125 # x3*(p/q)-0.03125
	
#	addsd	xmm1,xmm2				# x21_l+x3*(p/q)-0.03125-pi_d_2_l

#	subsd	xmm0,xmm1				# pi_d_2-x21-x21_l-x3*(p/q)+pi_d_2_l
	
#	ret

acos_real_2:
	ucomisd	xmm0,qword ptr real_0_75[rip]
	jb		acos_real_0_65

	movlpd	xmm1,qword ptr real_1_0[rip]

	ucomisd	xmm0,xmm1
	
	subsd	xmm1,xmm0

	jae		acos_real_1_or_e

	movlpd	xmm11,qword ptr real_2_0[rip]
	
	movsd	xmm0,xmm1					# x
	mulsd	xmm1,xmm1					# x2

	mulsd	xmm11,xmm0					# 2x

	movlpd	xmm7,qword ptr acos2_q_3[rip]

	movsd	xmm2,xmm1					# x2
	mulsd	xmm1,xmm1					# x4

	sqrtsd	xmm12,xmm11					# sqrt 2x

	movlpd	xmm5,qword ptr acos2_p_3[rip]
	movlpd	xmm8,qword ptr acos2_q_2[rip]

	movsd	xmm4,xmm1					# x4

	movlpd	xmm9,qword ptr acos2_q_1[rip]
	movlpd	xmm10,qword ptr acos2_p_1[rip]

	movsd	xmm3,xmm2					# x2
	mulsd	xmm3,xmm0					# x3

	mulsd	xmm1,qword ptr acos2_p_4[rip]	# p4

	mulsd	xmm7,xmm3					# q3
	mulsd	xmm5,xmm3					# p3

	mulsd	xmm8,xmm2					# q2
	mulsd	xmm2,qword ptr acos2_p_2[rip]	# p2

	addsd	xmm4,xmm7					# x4+q3
	addsd	xmm1,xmm5					# p4+p3

	mulsd	xmm9,xmm0					# q1
	mulsd	xmm10,xmm0					# p1

	addsd	xmm4,xmm8					# x4+q3+q2
	addsd	xmm1,xmm2					# p4+p3+p2

	addsd	xmm4,xmm9					# x4+q3+q2+q1
	addsd	xmm1,xmm10					# p4+p3+p2+p1

	movlpd	xmm13,qword ptr real_21_bits[rip]

	addsd	xmm4,qword ptr acos2_q_0[rip]	# x4+q3+q2+q1+q0
	addsd	xmm1,qword ptr acos2_p_0[rip]	# p4+p3+p2+p1+p0

	andpd	xmm13,xmm12					# s21

	divsd	xmm1,xmm4					# p/q

	movsd	xmm14,xmm13					# s21
	movsd	xmm15,xmm12					# s
	addsd	xmm12,xmm13					# s+s21
	mulsd	xmm13,xmm13					# s21*s21
	subsd	xmm11,xmm13					# 2x-s21*s21
	divsd	xmm11,xmm12					# sl
	
	mulsd	xmm0,xmm1					# x*p/q

	mulsd	xmm0,xmm15					# s
	addsd	xmm0,xmm11					# s*x*p/q+sl
	addsd	xmm0,xmm14					# s*x*p/q+sl+s21

	ret

acos_real_0_65:
	movlpd	xmm1,qword ptr real_0_65000000004061742054[rip]

	ucomisd	xmm0,xmm1
	subsd	xmm0,xmm1

	lea		rcx,acos_p1_c[rip]
	lea		rdx,acos_p2_c[rip]

	cmovb	rcx,rdx

	jmp		asin_real_pm_0_54

acos_real_3:
	movlpd	xmm1,qword ptr real_m_1_0[rip]

	ucomisd	xmm0,xmm1
	
	subsd	xmm0,xmm1

	jbe		acos_real_m_1_or_e

	movlpd	xmm11,qword ptr real_2_0[rip]
	
	movsd	xmm1,xmm0					# x
	mulsd	xmm0,xmm0					# x2

	mulsd	xmm11,xmm1					# 2x

	movlpd	xmm7,qword ptr acos2_q_3[rip]

	movsd	xmm2,xmm0					# x2
	mulsd	xmm0,xmm0					# x4

	sqrtsd	xmm12,xmm11					# sqrt 2x

	movlpd	xmm5,qword ptr acos2_p_3[rip]
	movlpd	xmm8,qword ptr acos2_q_2[rip]

	movsd	xmm4,xmm0					# x4

	movlpd	xmm9,qword ptr acos2_q_1[rip]
	movlpd	xmm10,qword ptr acos2_p_1[rip]

	movsd	xmm3,xmm2					# x2
	mulsd	xmm3,xmm1					# x3

	mulsd	xmm0,qword ptr acos2_p_4[rip]	# p4

	mulsd	xmm7,xmm3					# q3
	mulsd	xmm5,xmm3					# p3

	mulsd	xmm8,xmm2					# q2
	mulsd	xmm2,qword ptr acos2_p_2[rip]	# p2

	addsd	xmm4,xmm7					# x4+q3
	addsd	xmm0,xmm5					# p4+p3

	mulsd	xmm9,xmm1					# q1
	mulsd	xmm10,xmm1					# p1

	addsd	xmm4,xmm8					# x4+q3+q2
	addsd	xmm0,xmm2					# p4+p3+p2

	addsd	xmm4,xmm9					# x4+q3+q2+q1
	addsd	xmm0,xmm10					# p4+p3+p2+p1

	movlpd	xmm13,qword ptr real_21_bits[rip]

	addsd	xmm4,qword ptr acos2_q_0[rip]	# x4+q3+q2+q1+q0
	addsd	xmm0,qword ptr acos2_p_0[rip]	# p4+p3+p2+p1+p0

	andpd	xmm13,xmm12					# s21

	divsd	xmm0,xmm4					# p/q

	movsd	xmm14,xmm13					# s21
	movsd	xmm15,xmm12					# s
	addsd	xmm12,xmm13					# s+s21
	mulsd	xmm13,xmm13					# s21*s21
	subsd	xmm11,xmm13					# 2x-s21*s21
	divsd	xmm11,xmm12					# sl
	
	mulsd	xmm1,xmm0					# x*p/q

	mulsd	xmm1,xmm15					# s
	movlpd	xmm0,qword ptr real_pi[rip]

	subsd	xmm11,qword ptr real_pi_l[rip]	# sl-pi_l
	addsd	xmm1,xmm11					# s*x*p/q+sl-pi_l

	subsd	xmm0,xmm14					# pi-s21
	subsd	xmm0,xmm1					# pi-s21-(s*x*p/q+sl)

#	addsd	xmm1,xmm14					# s*x*p/q+sl+s21-pi_l
#	subsd	xmm0,xmm1					# pi-(s*x*p/q+sl+s21)

	ret

acos_real_1_or_e:
	jne		acos_real_e

	movlpd	xmm0,qword ptr real_0_0[rip]
	ret

acos_real_m_1_or_e:
	jb		acos_real_e					# NAN

	movlpd	xmm0,qword ptr real_pi[rip]
	ret

acos_real_e:
	subsd	xmm0,xmm0
	divsd	xmm0,xmm0
	ret

	.global	atan_real

atan_real:
	ucomisd	xmm0,qword ptr real_m_0_26[rip]

	movsd	xmm1,xmm0				# x

	jb		atan_real_n				# x<-0.26 | NAN

	ucomisd	xmm0,qword ptr real_1_0[rip]
	ja		atan_real_g1			# x>1.0

	ucomisd	xmm0,qword ptr real_0_70[rip]
	ja		atan_real_2

	ucomisd	xmm0,qword ptr real_0_26[rip]
	ja		atan_real_1

	ucomisd	xmm0,qword ptr real_0_0[rip]
	je		atan_real_0_0			# atan -0.0 = -0.0

	mulsd	xmm0,xmm0				# x2

	movlpd	xmm5,qword ptr atan_p_9_1[rip]
	
	movsd	xmm6,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	movsd	xmm14,xmm6				# x2
	mulsd	xmm5,xmm6				# p2

	mulsd	xmm6,xmm0				# x6

	movlpd	xmm9,qword ptr atan_p_9_2[rip]

	movsd	xmm10,xmm0				# x4
	mulsd	xmm0,xmm0				# x8

	mulsd	xmm9,xmm10				# p4

	movlpd	xmm7,qword ptr atan_p_9_3[rip]
	movlpd	xmm12,qword ptr atan_p_9_4[rip]

	mulsd	xmm10,xmm6				# x10

	movsd	xmm2,xmm6				# x6
	mulsd	xmm7,xmm6				# p6
	mulsd	xmm6,xmm6				# x12

	mulsd	xmm2,xmm0				# x14
	mulsd	xmm12,xmm0				# p8
	mulsd	xmm0,xmm0				# x16

	mulsd	xmm10,qword ptr atan_p_9_5[rip] # p10
	mulsd	xmm6,qword ptr atan_p_9_6[rip] # p12
	mulsd	xmm2,qword ptr atan_p_9_7[rip] # p14
	mulsd	xmm0,qword ptr atan_p_9_8[rip] # p16

	addsd	xmm0,xmm2				# p16+p14
	addsd	xmm0,xmm6				# p16+p14+p12
	addsd	xmm0,xmm10				# p16+p14+p12+p10
	addsd	xmm0,xmm12				# p16+p14+p12+p10+p8
	addsd	xmm0,xmm7				# p16+p14+p12+p10+p8+p6	

	mulsd	xmm14,xmm1				# x3

	addsd	xmm0,xmm9				# p16+p14+p12+p10+p8+p6+p4
	addsd	xmm0,xmm5				# p16+p14+p12+p10+p8+p6+p4+p2
	addsd	xmm0,qword ptr atan_p_9_0[rip] # p16+p14+p12+p10+p8+p6+p4+p2+p0

	mulsd	xmm0,xmm14				# x3*p

	addsd	xmm0,xmm1				# x+x3*p

atan_real_0_0:
	ret

atan_real_n:
	ucomisd	xmm0,qword ptr real_m_1_0[rip]
	jb		atan_real_l_m1			# x<-1.0 | NAN

	ucomisd	xmm0,qword ptr real_m_0_70[rip]
	jb		atan_real_2n

	movlpd	xmm2,qword ptr real_m_2_0[rip]
	movlpd	xmm3,qword ptr real_m_0_5[rip]

	lea		rdx,n_atan_0_5_52[rip]
	jmp		atan_real_1pn

atan_real_1:
	movlpd	xmm2,qword ptr real_2_0[rip]
	movlpd	xmm3,qword ptr real_0_5[rip]
	
	lea		rdx,atan_0_5_52[rip]

atan_real_1pn:
	addsd	xmm0,xmm2				# -2+x
	subsd	xmm3,xmm1				# -0.5-x

	divsd	xmm2,xmm0				# 2/(2+x) = 1/(1+0.5x)

	movlpd	xmm15,qword ptr real_26_bits[rip]
	movsd	xmm0,xmm3				# 0.5-x

	lea		rcx,atan_n_0_5_8_c[rip]
	movsd	xmm11,xmm3				# (0.5-x)
	andpd	xmm15,xmm3				# (0.5-x)_h

	subsd	xmm11,xmm15				# (0.5-x)_l

	mulsd	xmm0,xmm2				# y=(0.5-x)*(1/(1+0.5x))

	movsd	xmm4,xmm0				# y
	mulsd	xmm0,xmm0				# y2

	movlpd	xmm5,qword ptr (atan_n_0_5_8_1-atan_n_0_5_8_c)[rcx]

	movsd	xmm6,xmm0				# y2
	mulsd	xmm0,xmm0				# y4

	movsd	xmm14,xmm6				# y2
	mulsd	xmm5,xmm6				# p2

	movlpd	xmm8,qword ptr real_27_bits[rip]

	mulsd	xmm6,xmm0				# y6

	movlpd	xmm9,qword ptr (atan_n_0_5_8_2-atan_n_0_5_8_c)[rcx]

	movsd	xmm10,xmm0				# y4
	mulsd	xmm0,xmm0				# y8

	mulsd	xmm9,xmm10				# p4

	movlpd	xmm12,qword ptr (atan_n_0_5_8_4-atan_n_0_5_8_c)[rcx]

	mulsd	xmm10,xmm6				# y10

	movsd	xmm7,xmm6				# x6
	mulsd	xmm6,xmm6				# x12

	mulsd	xmm12,xmm0				# p8
	mulsd	xmm0,xmm7				# x14

	andpd	xmm8,xmm4				# y_h

	mulsd	xmm7,qword ptr (atan_n_0_5_8_3-atan_n_0_5_8_c)[rcx] # p6
	mulsd	xmm10,qword ptr (atan_n_0_5_8_5-atan_n_0_5_8_c)[rcx] # p10
	mulsd	xmm6,qword ptr (atan_n_0_5_8_6-atan_n_0_5_8_c)[rcx] # p12
	mulsd	xmm0,qword ptr (atan_n_0_5_8_7-atan_n_0_5_8_c)[rcx] # p14

	movlpd	xmm13,qword ptr real_0_25[rip]
	movlpd	xmm1,qword ptr (atan_0_5_real_0_5-atan_0_5_52)[rdx]
	mulsd	xmm13,xmm8				# 0.25*y_h
	mulsd	xmm1,xmm8				# 0.5*y_h
	subsd	xmm3,xmm8				# (0.5-x)-y_h

	addsd	xmm0,xmm6				# p14+p12

	subsd	xmm3,xmm13				# (0.5-x)-1.25*y_h	
	mulsd	xmm15,xmm1				# (0.5-x)_h*0.5*y_h
	mulsd	xmm11,xmm1				# (0.5-x)_l*0.5*y_h

	addsd	xmm0,xmm10				# p14+p12+p10

	addsd	xmm3,xmm15				# (0.5-x)-1.25*y_h+(0.5-x)_h*0.5*y_h

	addsd	xmm0,xmm12				# p14+p12+p10+p8

	addsd	xmm3,xmm11				# (0.5-x)-1.25*y_h+(0.5-x)_h*0.5*y_h+(0.5-x)_l*0.5*y_h

	addsd	xmm0,xmm7				# p14+p12+p10+p8+p6

	mulsd	xmm14,xmm4				# y3

	mulsd	xmm3,xmm2				# c=((0.5-x)-1.25*y_h-(0.5-x)_h*0.5*y_h-(0.5-x)_l*0.5*y_h)*(1/(1+0.5x))

	addsd	xmm0,xmm9				# p14+p12+p10+p8+p6+p4

	movsd	xmm11,xmm8				# y_h
	addsd	xmm8,xmm3				# y_h+c

	addsd	xmm0,xmm5				# p14+p12+p10+p8+p6+p4+p2

	movlpd	xmm7,qword ptr real_40_bits[rip]
	movlpd	xmm12,qword ptr real_abs_40_bits[rip]
	andpd	xmm7,xmm8				# (y_h+c)_h
	andpd	xmm12,xmm8

	addsd	xmm0,qword ptr (atan_n_0_5_8_0-atan_n_0_5_8_c)[rcx] # p14+p12+p10+p8+p6+p4+p2+p0

	subsd	xmm11,xmm7				# y_h-(y_h+c)_h
	addsd	xmm3,xmm11				# (y_h-(y_h+c)_h)+c

	mulsd	xmm0,xmm14				# y3*p/q

	movlpd	xmm2,qword ptr (atan_0_5_52_l-atan_0_5_52)[rdx]
	subsd	xmm2,xmm0				# atan_0_5_52_l-y3*p/q
	movlpd	xmm0,qword ptr (atan_0_5_52-atan_0_5_52)[rdx]

	ucomisd	xmm12,qword ptr real_2_p_m_13[rip]
	jb		atan_real_1_s

	subsd	xmm0,xmm7				# atan_0_5_52-(y_h+c)_h
	subsd	xmm2,xmm3				# atan_0_5_52_l-y3*p/q-(y_h+c)_l
	addsd	xmm0,xmm2				# atan 0_5-y3*p/q-(0.5-x)/(1+x)

	ret

atan_real_1_s:
	subsd	xmm2,xmm3				# atan_0_5_52_l-y3*p/q-(y_h+c)_l
	subsd	xmm2,xmm7				# atan_0_5_52_l-y3*p/q-(y_h+c)_l-(y_h+c)_h
	addsd	xmm0,xmm2				# atan 0_5-y3*p/q-(1-x)/(1+x)
	ret

atan_real_2n:
	lea		rcx,atan_n_8_c[rip]

atan_real_2n_:
	movlpd	xmm2,qword ptr real_m_1_0[rip]
	movlpd	xmm3,qword ptr real_m_1_0[rip]

	addsd	xmm0,xmm2				# 1+x
	subsd	xmm3,xmm1				# 1-x

	lea		rdx,n_atan_1_53[rip]

	divsd	xmm2,xmm0				# 1/(1+x)

	movlpd	xmm15,qword ptr real_26_bits[rip]
	movsd	xmm0,xmm3				# 1-x

	movsd	xmm11,xmm3				# (1-x)
	andpd	xmm15,xmm3				# (1-x)_h

	subsd	xmm11,xmm15				# (1-x)_l

	mulsd	xmm0,xmm2				# y=(1-x)*(1/(1+x))

	movsd	xmm4,xmm0				# y
	mulsd	xmm0,xmm0				# y2
	
	movlpd	xmm5,qword ptr (atan_n_8_1-atan_n_8_c)[rcx]

	movsd	xmm6,xmm0				# y2
	mulsd	xmm0,xmm0				# y4

	movsd	xmm14,xmm6				# y2
	mulsd	xmm5,xmm6				# p2

	movlpd	xmm8,qword ptr real_27_bits[rip]

	mulsd	xmm6,xmm0				# y6

	movlpd	xmm9,qword ptr (atan_n_8_2-atan_n_8_c)[rcx]

	movsd	xmm10,xmm0				# y4
	mulsd	xmm0,xmm0				# y8

	mulsd	xmm9,xmm10				# p4

	movlpd	xmm12,qword ptr (atan_n_8_4-atan_n_8_c)[rcx]

	mulsd	xmm10,xmm6				# y10

	movsd	xmm7,xmm6				# x6
	mulsd	xmm6,xmm6				# x12

	mulsd	xmm12,xmm0				# p8
	mulsd	xmm0,xmm7				# x14

	andpd	xmm8,xmm4				# y_h

	mulsd	xmm7,qword ptr (atan_n_8_3-atan_n_8_c)[rcx] # p6
	mulsd	xmm10,qword ptr (atan_n_8_5-atan_n_8_c)[rcx] # p10
	mulsd	xmm6,qword ptr (atan_n_8_6-atan_n_8_c)[rcx] # p12
	mulsd	xmm0,qword ptr (atan_n_8_7-atan_n_8_c)[rcx] # p14

	movlpd	xmm13,qword ptr real_2_0[rip]
	mulsd	xmm13,xmm8				# 2*y_h
	mulsd	xmm15,xmm8				# (1-x)_h*y_h

	addsd	xmm0,xmm6				# p14+p12

	subsd	xmm3,xmm13				# (1-x)-2*y_h
	mulsd	xmm11,xmm8				# (1-x)_l*y_h

	addsd	xmm0,xmm10				# p14+p12+p10

	subsd	xmm3,xmm15				# (1-x)-2*y_h-(1-x)_h*y_h

	addsd	xmm0,xmm12				# p14+p12+p10+p8

	subsd	xmm3,xmm11				# (1-x)-2*y_h-(1-x)_h*y_h-(1-x)_h*y_l
	jmp		atan_real_2pn_

atan_real_2:
	lea		rcx,atan_n_8_c[rip]

atan_real_2p_:
	movlpd	xmm2,qword ptr real_1_0[rip]
	movlpd	xmm3,qword ptr real_1_0[rip]

	addsd	xmm0,xmm2				# 1+x
	subsd	xmm3,xmm1				# 1-x

	lea		rdx,atan_1_53[rip]
	
	divsd	xmm2,xmm0				# 1/(1+x)

	movlpd	xmm15,qword ptr real_26_bits[rip]
	movsd	xmm0,xmm3				# 1-x
	
	movsd	xmm11,xmm3				# (1-x)
	andpd	xmm15,xmm3				# (1-x)_h

	subsd	xmm11,xmm15				# (1-x)_l

	mulsd	xmm0,xmm2				# y=(1-x)*(1/(1+x))

	movsd	xmm4,xmm0				# y
	mulsd	xmm0,xmm0				# y2
	
	movlpd	xmm5,qword ptr (atan_n_8_1-atan_n_8_c)[rcx]

	movsd	xmm6,xmm0				# y2
	mulsd	xmm0,xmm0				# y4

	movsd	xmm14,xmm6				# y2
	mulsd	xmm5,xmm6				# p2

	movlpd	xmm8,qword ptr real_27_bits[rip]

	mulsd	xmm6,xmm0				# y6

	movlpd	xmm9,qword ptr (atan_n_8_2-atan_n_8_c)[rcx]

	movsd	xmm10,xmm0				# y4
	mulsd	xmm0,xmm0				# y8

	mulsd	xmm9,xmm10				# p4

	movlpd	xmm12,qword ptr (atan_n_8_4-atan_n_8_c)[rcx]

	mulsd	xmm10,xmm6				# y10

	movsd	xmm7,xmm6				# x6
	mulsd	xmm6,xmm6				# x12

	mulsd	xmm12,xmm0				# p8
	mulsd	xmm0,xmm7				# x14

	andpd	xmm8,xmm4				# y_h

	mulsd	xmm7,qword ptr (atan_n_8_3-atan_n_8_c)[rcx] # p6
	mulsd	xmm10,qword ptr (atan_n_8_5-atan_n_8_c)[rcx] # p10
	mulsd	xmm6,qword ptr (atan_n_8_6-atan_n_8_c)[rcx] # p12
	mulsd	xmm0,qword ptr (atan_n_8_7-atan_n_8_c)[rcx] # p14

	movlpd	xmm13,qword ptr real_2_0[rip]
	mulsd	xmm13,xmm8				# 2*y_h
	mulsd	xmm15,xmm8				# (1-x)_h*y_h

	addsd	xmm0,xmm6				# p14+p12

	subsd	xmm3,xmm13				# (1-x)-2*y_h
	mulsd	xmm11,xmm8				# (1-x)_l*y_h

	addsd	xmm0,xmm10				# p14+p12+p10

	addsd	xmm3,xmm15				# (1-x)-2*y_h+(1-x)_h*y_h

	addsd	xmm0,xmm12				# p14+p12+p10+p8

	addsd	xmm3,xmm11				# (1-x)-2*y_h+(1-x)_h*y_h+(1-x)_h*y_l

atan_real_2pn_:
	addsd	xmm0,xmm7				# p14+p12+p10+p8+p6

	mulsd	xmm14,xmm4				# y3
	
	mulsd	xmm3,xmm2				# c=((1-x)-2*y_h-(1-x)_h*y_h-(1-x)_h*y_l)*(1/(1+x))

	addsd	xmm0,xmm9				# p14+p12+p10+p8+p6+p4

	movsd	xmm11,xmm8				# y_h
	addsd	xmm8,xmm3				# y_h+c

	addsd	xmm0,xmm5				# p14+p12+p10+p8+p6+p4+p2

	movlpd	xmm7,qword ptr (atan_n_8_real_40_bits-atan_n_8_c)[rcx]
	movlpd	xmm12,qword ptr (atan_n_8_real_abs_40_bits-atan_n_8_c)[rcx]
	andpd	xmm7,xmm8				# (y_h+c)_h
	andpd	xmm12,xmm8

	addsd	xmm0,qword ptr (atan_n_8_0-atan_n_8_c)[rcx] # p14+p12+p10+p8+p6+p4+p2+p0

	subsd	xmm11,xmm7				# y_h-(y_h+c)_h
	addsd	xmm3,xmm11				# (y_h-(y_h+c)_h)+c
	
	mulsd	xmm0,xmm14				# y3*p/q

	movlpd	xmm2,qword ptr (atan_1_53_l-atan_1_53)[rdx]
	subsd	xmm2,xmm0				# pi_d_4_l-y3*p/q
	movlpd	xmm0,qword ptr (atan_1_53-atan_1_53)[rdx]

	ucomisd	xmm12,qword ptr (atan_n_8_real_2_p_m_12-atan_n_8_c)[rcx]
	jb		atan_real_2_s

	subsd	xmm0,xmm7				# pi_d_4-(y_h+c)_h
	subsd	xmm2,xmm3				# pi_d_4_l-y3*p/q-(y_h+c)_l
	addsd	xmm0,xmm2				# pi/4-y3*p/q-(1-x)/(1+x)

	ret

atan_real_2_s:
	subsd	xmm2,xmm3				# pi_d_4_l-y3*p/q-(y_h+c)_l
	subsd	xmm2,xmm7				# pi_d_4_l-y3*p/q-(y_h+c)_l-(y_h+c)_h
	addsd	xmm0,xmm2				# pi/4-y3*p/q-(1-x)/(1+x)
	ret

atan_real_l_m1:
	ucomisd	xmm0,qword ptr real_m_4_0[rip]
	jb		atan_real_4n			# x<4.0 | NAN

	ucomisd	xmm0,qword ptr real_m_1_4[rip]
	jb		atan_real_3n

	lea		rcx,atan_p_8_c[rip]

	jmp		atan_real_2n_

atan_real_g1:
	ucomisd	xmm0,qword ptr real_4_0[rip]
	ja		atan_real_4				# x>4.0

	ucomisd	xmm0,qword ptr real_1_4[rip]
	ja		atan_real_3

	lea		rcx,atan_p_8_c[rip]

	jmp		atan_real_2p_

atan_real_3n:
	movlpd	xmm2,qword ptr real_m_0_5[rip]
	movlpd	xmm3,qword ptr real_m_2_0[rip]

	lea		rdx,n_atan_2_0[rip]
	jmp		atan_real_3pn

atan_real_3:
	movlpd	xmm2,qword ptr real_0_5[rip]
	movlpd	xmm3,qword ptr real_2_0[rip]

	lea		rdx,atan_2_0[rip]

atan_real_3pn:
	addsd	xmm0,xmm2				# 0.5+x
	subsd	xmm3,xmm1				# 2-x
	
	divsd	xmm2,xmm0				# 0.5/(0.5+x) = 1/(1+2*x)

	movlpd	xmm15,qword ptr real_26_bits[rip]
	movsd	xmm0,xmm3				# 2-x

	movsd	xmm11,xmm3				# (2-x)
	andpd	xmm15,xmm3				# (2-x)_h

	lea		rcx,atan_n_2_8_c[rip]
	subsd	xmm11,xmm15				# (2-x)_l

	mulsd	xmm0,xmm2				# y=(2-x)*(1/(1+0.5x))

	movsd	xmm4,xmm0				# y
	mulsd	xmm0,xmm0				# y2

	movlpd	xmm5,qword ptr (atan_n_2_8_1-atan_n_2_8_c)[rcx]

	movsd	xmm6,xmm0				# y2
	mulsd	xmm0,xmm0				# y4

	movsd	xmm14,xmm6				# y2
	mulsd	xmm5,xmm6				# p2

	movlpd	xmm8,qword ptr real_27_bits[rip]

	mulsd	xmm6,xmm0				# y6

	movlpd	xmm9,qword ptr (atan_n_2_8_2-atan_n_2_8_c)[rcx]

	movsd	xmm10,xmm0				# y4
	mulsd	xmm0,xmm0				# y8

	mulsd	xmm9,xmm10				# p4

	movlpd	xmm12,qword ptr (atan_n_2_8_4-atan_n_2_8_c)[rcx]

	mulsd	xmm10,xmm6				# y10

	movsd	xmm7,xmm6				# x6
	mulsd	xmm6,xmm6				# x12

	mulsd	xmm12,xmm0				# p8
	mulsd	xmm0,xmm7				# x14

	andpd	xmm8,xmm4				# y_h

	mulsd	xmm7,qword ptr (atan_n_2_8_3-atan_n_2_8_c)[rcx] # p6
	mulsd	xmm10,qword ptr (atan_n_2_8_5-atan_n_2_8_c)[rcx] # p10
	mulsd	xmm6,qword ptr (atan_n_2_8_6-atan_n_2_8_c)[rcx] # p12
	mulsd	xmm0,qword ptr (atan_n_2_8_7-atan_n_2_8_c)[rcx] # p14

	movlpd	xmm13,qword ptr real_4_0[rip]
	movlpd	xmm1,qword ptr (atan_2_0_real_2_0-atan_2_0)[rdx]
	mulsd	xmm13,xmm8				# 4*y_h
	mulsd	xmm1,xmm8				# 2*y_h

	addsd	xmm0,xmm6				# p14+p12

	subsd	xmm3,xmm13				# (2-x)-4*y_h
	mulsd	xmm15,xmm1				# (2-x)_h*2*y_h
	mulsd	xmm11,xmm1				# (2-x)_l*2*y_h
	subsd	xmm3,xmm8				# (2-x)-y_h

	addsd	xmm0,xmm10				# p14+p12+p10

	addsd	xmm3,xmm15				# (2-x)-5*y_h+(2-x)_h*2*y_h

	addsd	xmm0,xmm12				# p14+p12+p10+p8

	addsd	xmm3,xmm11				# (2-x)-5*y_h+(2-x)_h*2*y_h+(2-x)_l*2*y_h

	addsd	xmm0,xmm7				# p14+p12+p10+p8+p6

	mulsd	xmm14,xmm4				# y3

	mulsd	xmm3,xmm2				# c=((2-x)-5*y_h-(2-x)_h*2*y_h-(2-x)_l*2*y_h)*(1/(1+0.5x))

	addsd	xmm0,xmm9				# p14+p12+p10+p8+p6+p4

	movsd	xmm11,xmm8				# y_h
	addsd	xmm8,xmm3				# y_h+c

	addsd	xmm0,xmm5				# p14+p12+p10+p8+p6+p4+p2

	movlpd	xmm7,qword ptr real_39_bits[rip]
	movlpd	xmm12,qword ptr real_abs_39_bits[rip]
	andpd	xmm7,xmm8
	andpd	xmm12,xmm8				# (y_h+c)_h

	addsd	xmm0,qword ptr (atan_n_2_8_0-atan_n_2_8_c)[rcx] # p14+p12+p10+p8+p6+p4+p2+p0

	subsd	xmm11,xmm7				# y_h-(y_h+c)_h
	addsd	xmm3,xmm11				# (y_h-(y_h+c)_h)+c
	
	mulsd	xmm0,xmm14				# y3*p/q

	movlpd	xmm2,qword ptr (atan_2_0_l-atan_2_0)[rdx]
	subsd	xmm2,xmm0				# atan_2_0_l-y3*p/q
	movlpd	xmm0,qword ptr (atan_2_0-atan_2_0)[rdx]

	ucomisd	xmm12,qword ptr real_2_p_m_11[rip]
	jb		atan_real_3_s

	subsd	xmm0,xmm7				# atan_2_0-(y_h+c)_h
	subsd	xmm2,xmm3				# atan_2_0_l-y3*p/q-(y_h+c)_l
	addsd	xmm0,xmm2				# atan 2_0-y3*p/q-(2-x)/(1+x)

	ret

atan_real_3_s:
	subsd	xmm2,xmm3				# atan_2_0_l-y3*p/q-(y_h+c)_l
	subsd	xmm2,xmm7				# atan_2_0_l-y3*p/q-(y_h+c)_l-(y_h+c)_h
	addsd	xmm0,xmm2				# atan 2_0-y3*p/q-(1-x)/(1+x)
	ret

atan_real_4n:
	ucomisd	xmm0,qword ptr real_atan_m_large[rip]
	jb		atan_real_m_large_or_nan # x<-5805358775541310.0840 | NAN

	movlpd	xmm2,qword ptr real_1_0[rip]
	mulsd	xmm0,xmm0				# x2

	lea		rdx,real_m_pi_d_2[rip]

	jmp		atan_real_4pn

atan_real_4:
	ucomisd	xmm0,qword ptr real_atan_large[rip]
	ja		atan_real_large			# x>5805358775541310.0840

	movlpd	xmm2,qword ptr real_1_0[rip]
	mulsd	xmm0,xmm0				# x2

	lea		rdx,real_pi_d_2[rip]

atan_real_4pn:
	divsd	xmm2,xmm1				# 1/x

	lea		rcx,atan4_p_c[rip]

	movlpd	xmm4,qword ptr (atan4_q_4-atan4_p_c)[rcx]
	movlpd	xmm3,qword ptr (atan4_p_3-atan4_p_c)[rcx]

	movsd	xmm5,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	mulsd	xmm4,xmm5				# q2
	mulsd	xmm3,xmm5				# p2

	movlpd	xmm9,qword ptr (atan4_q_3-atan4_p_c)[rcx]
	movlpd	xmm8,qword ptr (atan4_p_2-atan4_p_c)[rcx]

	movsd	xmm6,xmm0				# x4
	mulsd	xmm0,xmm5				# x6

	mulsd	xmm9,xmm6				# q4
	mulsd	xmm8,xmm6				# p4

	movlpd	xmm11,qword ptr (atan4_q_2-atan4_p_c)[rcx]
	movlpd	xmm10,qword ptr (atan4_p_1-atan4_p_c)[rcx]

	addsd	xmm4,qword ptr real_1_0[rip]	# 1+q2
	addsd	xmm3,qword ptr (atan4_p_4-atan4_p_c)[rcx] # p0+p2
	
	movsd	xmm7,xmm6				# x4
	mulsd	xmm6,xmm6				# x8

	mulsd	xmm11,xmm0				# q6
	mulsd	xmm10,xmm0				# p6

	addsd	xmm4,xmm9				# 1+q2+q4
	addsd	xmm3,xmm8				# p0+p2+p4

	mulsd	xmm0,xmm7				# x10

	movlpd	xmm9,qword ptr (atan4_q_1-atan4_p_c)[rcx]
	movlpd	xmm8,qword ptr (atan4_p_0-atan4_p_c)[rcx]

	addsd	xmm4,xmm11				# 1+q2+q4+q6
	addsd	xmm3,xmm10				# p0+p2+p4+p6

	mulsd	xmm9,xmm6				# q8
	mulsd	xmm8,xmm6				# p8

	mulsd	xmm0,qword ptr (atan4_q_0-atan4_p_c)[rcx]# q10

	movlpd	xmm5,qword ptr real_26_bits[rip]
	movsd	xmm6,xmm1				# x
	movlpd	xmm7,qword ptr real_26_bits[rip]
	andpd	xmm5,xmm1				# x_h
	subsd	xmm6,xmm5				# x_l
	andpd	xmm7,xmm2				# (1/x)_h

	addsd	xmm4,xmm9				# 1+q2+q4+q6+q8
	addsd	xmm3,xmm8				# p0+p2+p4+p6+p8

	movlpd	xmm8,qword ptr real_1_0[rip]
	mulsd	xmm5,xmm7				# x_h*(1/x)_h
	mulsd	xmm6,xmm7				# x_l*(1/x)_h

	addsd	xmm4,xmm0				# 1+q2+q4+q6+q8+q10

	subsd	xmm8,xmm5				# 1-x_h*(1/x)_h
	
	subsd	xmm8,xmm6				# 1-x_h*(1/x)_h-x_l*(1/x)_h

	mulsd	xmm8,xmm2				# (1-x_h*(1/x)_h-x_l*(1/x)_h)*(1/x)

	divsd	xmm3,xmm4				# p/q

	movlpd	xmm1,qword ptr (real_pi_d_2_l-real_pi_d_2)[rdx]
	movlpd	xmm0,qword ptr (real_pi_d_2-real_pi_d_2)[rdx]

	mulsd	xmm3,xmm2				# (p/q)*(1/x)

	subsd	xmm1,xmm3				# pi_d_2_l-(p/q)*(1/x)
	subsd	xmm0,xmm7				# pi_d_2-(1/x)_h
	subsd	xmm1,xmm8				# pi_d_2_l-(p/q)*(1/x)-(1/x)_l
	addsd	xmm0,xmm1
	ret

atan_real_4poly:
	movlpd	xmm3,qword ptr real_1_0[rip]
	divsd	xmm3,xmm0				# 1/x

	movlpd	xmm5,qword ptr real_26_bits[rip]
	movsd	xmm6,xmm0				# x
	movlpd	xmm7,qword ptr real_26_bits[rip]
	andpd	xmm5,xmm0				# x_h

	subsd	xmm6,xmm5				# x_l

	movsd	xmm15,xmm3				# x
	mulsd	xmm3,xmm3				# x2

	movlpd	xmm1,qword ptr atan_p_9_1[rip]
	
	movsd	xmm11,xmm3				# x2
	mulsd	xmm3,xmm3				# x4

	movsd	xmm14,xmm11				# x2
	mulsd	xmm1,xmm11				# p2

	mulsd	xmm11,xmm3				# x6

	movlpd	xmm9,qword ptr atan_p_9_2[rip]

	movsd	xmm10,xmm3				# x4
	mulsd	xmm3,xmm3				# x8

	mulsd	xmm9,xmm10				# p4

	movlpd	xmm4,qword ptr atan_p_9_3[rip]
	movlpd	xmm12,qword ptr atan_p_9_4[rip]

	mulsd	xmm10,xmm11				# x10

	movsd	xmm2,xmm11				# x6
	mulsd	xmm4,xmm11				# p6
	mulsd	xmm11,xmm11				# x12

	mulsd	xmm2,xmm3				# x14
	mulsd	xmm12,xmm3				# p8
	mulsd	xmm3,xmm3				# x16

	mulsd	xmm10,qword ptr atan_p_9_5[rip] # p10
	mulsd	xmm11,qword ptr atan_p_9_6[rip] # p12
	mulsd	xmm2,qword ptr atan_p_9_7[rip] # p14
	mulsd	xmm3,qword ptr atan_p_9_8[rip] # p16

	addsd	xmm3,xmm2				# p16+p14
	addsd	xmm3,xmm11				# p16+p14+p12
	addsd	xmm3,xmm10				# p16+p14+p12+p10

	andpd	xmm7,xmm15				# (1/x)_h

	addsd	xmm3,xmm12				# p16+p14+p12+p10+p8

	movlpd	xmm8,qword ptr real_1_0[rip]
	mulsd	xmm5,xmm7				# x_h*(1/x)_h
	mulsd	xmm6,xmm7				# x_l*(1/x)_h

	addsd	xmm3,xmm4				# p16+p14+p12+p10+p8+p6	

	mulsd	xmm14,xmm15				# x3

	subsd	xmm8,xmm5				# 1-x_h*(1/x)_h

	addsd	xmm3,xmm9				# p16+p14+p12+p10+p8+p6+p4
	
	subsd	xmm8,xmm6				# 1-x_h*(1/x)_h-x_l*(1/x)_h

	addsd	xmm3,xmm1				# p16+p14+p12+p10+p8+p6+p4+p2

	mulsd	xmm8,xmm15				# (1-x_h*(1/x)_h-x_l*(1/x)_h)*(1/x)

	addsd	xmm3,qword ptr atan_p_9_0[rip] # p16+p14+p12+p10+p8+p6+p4+p2+p0

	movlpd	xmm1,qword ptr real_pi_d_2_l[rip]
	movlpd	xmm0,qword ptr real_pi_d_2[rip]

	mulsd	xmm3,xmm14				# x3*p

	subsd	xmm1,xmm3				# pi_d_2_l-(p/q)*(1/x)
	subsd	xmm0,xmm7				# pi_d_2-(1/x)_h
	subsd	xmm1,xmm8				# pi_d_2_l-(p/q)*(1/x)-(1/x)_l
	addsd	xmm0,xmm1
	ret

atan_real_m_large_or_nan:
	jp		atan_real_nan

	movlpd	xmm0,qword ptr real_m_pi_d_2[rip]
	ret

atan_real_nan:
	addsd	xmm0,xmm0
	ret

atan_real_large:
	movlpd	xmm0,qword ptr real_pi_d_2[rip]
	ret

	.global	exp_real

exp_real:
	ucomisd	xmm0,qword ptr real_ln_2_t_0_5[rip]
	ja	exp_real_2				# x>0.3.4657359027997265471

	ucomisd	xmm0,qword ptr real_n_ln_2_t_0_5[rip]
	jb	exp_real_3_n			# x<-0.34657359027997265471 | nan

	movlpd	xmm1,qword ptr n_45_d_256[rip]
	movlpd	xmm2,qword ptr n_m_45_d_256[rip]

	ucomisd	xmm0,xmm1
	ja	exp_real_p1

	ucomisd	xmm0,xmm2
	jb	exp_real_n1

	ucomisd	xmm0,qword ptr real_0_0[rip]

	lea	rcx,exp_p0_c[rip]
	lea	rdx,exp_m0_c[rip]

	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	cmovb	rcx,rdx

	movlpd	xmm6,qword ptr (exp_p0_2-exp_p0_c)[rcx]
	movlpd	xmm7,qword ptr (exp_p0_4-exp_p0_c)[rcx]

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	mulsd	xmm6,xmm2				# p2

	movsd	xmm3,xmm1				# x
	mulsd	xmm1,xmm2				# x3

	movlpd	xmm8,qword ptr (exp_p0_3-exp_p0_c)[rcx]
	mulsd	xmm7,xmm0				# p4
	
	mulsd	xmm8,xmm1				# p3

	movsd	xmm4,xmm0				# x4
	mulsd	xmm0,xmm0				# x8

	movsd	xmm5,xmm2				# x2
	mulsd	xmm2,xmm1				# x5	

	mulsd	xmm5,xmm4				# x6
	mulsd	xmm1,xmm4				# x7
	mulsd	xmm4,xmm2				# x9

	mulsd	xmm0,qword ptr (exp_p0_8-exp_p0_c)[rcx] # p8
	mulsd	xmm2,qword ptr (exp_p0_5-exp_p0_c)[rcx]	# p5
	mulsd	xmm5,qword ptr (exp_p0_6-exp_p0_c)[rcx]	# p6
	mulsd	xmm1,qword ptr (exp_p0_7-exp_p0_c)[rcx]	# p7
	mulsd	xmm4,qword ptr (exp_p0_9-exp_p0_c)[rcx]	# p9

	addsd	xmm0,xmm4				# p9+p8

	movlpd	xmm9,qword ptr real_26_bits[rip]
	movlpd	xmm10,qword ptr real_1_0[rip]

	addsd	xmm0,xmm1				# p9+p8+p7
	addsd	xmm0,xmm5				# p9+p8+p7+p6

	andpd	xmm9,xmm3				# x_h

	addsd	xmm0,xmm2				# p9+p8+p7+p6+p5

	addsd	xmm9,xmm10				# 1+x_h

	addsd	xmm0,xmm7				# p9+p8+p7+p6+p5+p4

	subsd	xmm10,xmm9				# 1-(1+x_h)

	addsd	xmm0,xmm8				# p9+p8+p7+p6+p5+p4+p3

	addsd	xmm10,xmm3				# (1-(1+x_h))+x

	addsd	xmm0,xmm6				# p9+p8+p7+p6+p5+p4+p3+p2

	addsd	xmm0,xmm10
	addsd	xmm0,xmm9
	ret

exp_real_n1:
	subsd	xmm0,xmm2

	lea		rcx,exp_m1_c[rip]
	jmp		exp_real_np1

exp_real_p1:
	subsd	xmm0,xmm1

	lea		rcx,exp_p1_c[rip]

exp_real_np1:
	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	movlpd	xmm6,qword ptr (exp_p1_2-exp_p1_c)[rcx]
	movlpd	xmm7,qword ptr (exp_p1_4-exp_p1_c)[rcx]

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	mulsd	xmm6,xmm2				# p2

	movsd	xmm3,xmm1				# x
	mulsd	xmm1,xmm2				# x3

	movlpd	xmm8,qword ptr (exp_p1_3-exp_p1_c)[rcx]
	mulsd	xmm7,xmm0				# p4
	
	mulsd	xmm8,xmm1				# p3

	movsd	xmm4,xmm0				# x4
	mulsd	xmm0,xmm0				# x8

	movsd	xmm5,xmm2				# x2
	mulsd	xmm2,xmm1				# x5	

	mulsd	xmm5,xmm4				# x6
	mulsd	xmm1,xmm4				# x7
	mulsd	xmm4,xmm2				# x9

	mulsd	xmm0,qword ptr (exp_p1_8-exp_p1_c)[rcx] # p8
	mulsd	xmm2,qword ptr (exp_p1_5-exp_p1_c)[rcx]	# p5
	mulsd	xmm5,qword ptr (exp_p1_6-exp_p1_c)[rcx]	# p6
	mulsd	xmm1,qword ptr (exp_p1_7-exp_p1_c)[rcx]	# p7
	mulsd	xmm4,qword ptr (exp_p1_9-exp_p1_c)[rcx]	# p9

	addsd	xmm0,xmm4				# p9+p8

	movlpd	xmm9,qword ptr real_26_bits[rip]

	addsd	xmm0,xmm1				# p9+p8+p7

	movsd	xmm11,xmm3				# x
	andpd	xmm9,xmm3				# x_h
	mulsd	xmm3,qword ptr (exp_p1_1_l-exp_p1_c)[rcx] # x*c1_l

	addsd	xmm0,xmm5				# p9+p8+p7+p6

	subsd	xmm11,xmm9				# x_l
	mulsd	xmm9,qword ptr (exp_p1_1_h-exp_p1_c)[rcx] # x_h*c1_h

	addsd	xmm0,xmm2				# p9+p8+p7+p6+p5
	
	movlpd	xmm10,qword ptr (exp_p1_0-exp_p1_c)[rcx]
	mulsd	xmm11,qword ptr (exp_p1_1_h-exp_p1_c)[rcx] # x_l*c1_h
	addsd	xmm10,xmm9				# x_h*c1_h+c0
	movlpd	xmm12,qword ptr (exp_p1_0-exp_p1_c)[rcx]

	addsd	xmm0,xmm7				# p9+p8+p7+p6+p5+p4

	addsd	xmm3,xmm11				# x*c1_l+x_l*c1_h
	subsd	xmm12,xmm10				# c0-(x_h*c1_h+c0)

	addsd	xmm0,xmm8				# p9+p8+p7+p6+p5+p4+p3

	addsd	xmm12,xmm9				# (c0-(x_h*c1_h+c0))+x_h*c1_h

	addsd	xmm0,xmm6				# p9+p8+p7+p6+p5+p4+p3+p2

	addsd	xmm3,xmm12				# (c0-(x_h*c1_h+c0))+x_h*c1_h+x*c1_l+x_l*c1_h

	addsd	xmm0,qword ptr (exp_p1_0_l-exp_p1_c)[rcx]

	addsd	xmm0,xmm3
	addsd	xmm0,xmm10
	ret

exp_real_2:
	ucomisd	xmm0,qword ptr real_ln_2_t_1_5[rip]
	ja		exp_real_3

	subsd	xmm0,qword ptr real_ln2_42[rip]
	movlpd	xmm14,qword ptr real_ln2_42_l[rip]

	movsd	xmm13,xmm0
	subsd	xmm0,xmm14

	movlpd	xmm15,qword ptr real_2_0[rip]

exp_real_:
	movlpd	xmm1,qword ptr n_45_d_256[rip]
	movlpd	xmm2,qword ptr n_m_45_d_256[rip]

	ucomisd	xmm0,xmm1
	ja		exp_real_p1_

	ucomisd	xmm0,xmm2
	jb		exp_real_n1_

	ucomisd	xmm0,qword ptr real_0_0[rip]

	lea		rcx,exp_p0_c[rip]
	lea		rdx,exp_m0_c[rip]

	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	cmovb	rcx,rdx

	movlpd	xmm6,qword ptr (exp_p0_2-exp_p0_c)[rcx]
	movlpd	xmm7,qword ptr (exp_p0_4-exp_p0_c)[rcx]

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	mulsd	xmm6,xmm2				# p2

	movsd	xmm3,xmm1				# x
	mulsd	xmm1,xmm2				# x3

	movlpd	xmm8,qword ptr (exp_p0_3-exp_p0_c)[rcx]
	mulsd	xmm7,xmm0				# p4
	
	mulsd	xmm8,xmm1				# p3

	movsd	xmm4,xmm0				# x4
	mulsd	xmm0,xmm0				# x8

	movsd	xmm5,xmm2				# x2
	mulsd	xmm2,xmm1				# x5	

	mulsd	xmm5,xmm4				# x6
	mulsd	xmm1,xmm4				# x7
	mulsd	xmm4,xmm2				# x9

	mulsd	xmm0,qword ptr (exp_p0_8-exp_p0_c)[rcx] # p8
	mulsd	xmm2,qword ptr (exp_p0_5-exp_p0_c)[rcx]	# p5
	mulsd	xmm5,qword ptr (exp_p0_6-exp_p0_c)[rcx]	# p6
	mulsd	xmm1,qword ptr (exp_p0_7-exp_p0_c)[rcx]	# p7
	mulsd	xmm4,qword ptr (exp_p0_9-exp_p0_c)[rcx]	# p9

	addsd	xmm0,xmm4				# p9+p8

	movlpd	xmm9,qword ptr real_26_bits[rip]
	movlpd	xmm10,qword ptr real_1_0[rip]

	addsd	xmm0,xmm1				# p9+p8+p7

	andpd	xmm9,xmm3				# x_h

	addsd	xmm0,xmm5				# p9+p8+p7+p6

	addsd	xmm9,xmm10				# 1+x_h

	addsd	xmm0,xmm2				# p9+p8+p7+p6+p5

	subsd	xmm10,xmm9				# 1-(1+x_h)

	addsd	xmm0,xmm7				# p9+p8+p7+p6+p5+p4

	addsd	xmm10,xmm13				# (1-(1+x_h))+xh

	addsd	xmm0,xmm8				# p9+p8+p7+p6+p5+p4+p3

	subsd	xmm10,xmm14				# (1-(1+x_h))+xh-nxl

	addsd	xmm0,xmm6				# p9+p8+p7+p6+p5+p4+p3+p2

	addsd	xmm0,xmm10
	addsd	xmm0,xmm9

	mulsd	xmm0,xmm15
	ret

exp_real_n1_:
	subsd	xmm0,xmm2
	subsd	xmm13,xmm2

	lea		rcx,exp_m1_c[rip]
	jmp		exp_real_np1_

exp_real_p1_:
	subsd	xmm0,xmm1
	subsd	xmm13,xmm1

	lea		rcx,exp_p1_c[rip]

exp_real_np1_:
	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	movlpd	xmm6,qword ptr (exp_p1_2-exp_p1_c)[rcx]
	movlpd	xmm7,qword ptr (exp_p1_4-exp_p1_c)[rcx]

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	mulsd	xmm6,xmm2				# p2

	movsd	xmm3,xmm1				# x
	mulsd	xmm1,xmm2				# x3

	movlpd	xmm8,qword ptr (exp_p1_3-exp_p1_c)[rcx]
	mulsd	xmm7,xmm0				# p4
	
	mulsd	xmm8,xmm1				# p3

	movsd	xmm4,xmm0				# x4
	mulsd	xmm0,xmm0				# x8

	movsd	xmm5,xmm2				# x2
	mulsd	xmm2,xmm1				# x5	

	mulsd	xmm5,xmm4				# x6
	mulsd	xmm1,xmm4				# x7
	mulsd	xmm4,xmm2				# x9

	mulsd	xmm0,qword ptr (exp_p1_8-exp_p1_c)[rcx] # p8
	mulsd	xmm2,qword ptr (exp_p1_5-exp_p1_c)[rcx]	# p5
	mulsd	xmm5,qword ptr (exp_p1_6-exp_p1_c)[rcx]	# p6
	mulsd	xmm1,qword ptr (exp_p1_7-exp_p1_c)[rcx]	# p7
	mulsd	xmm4,qword ptr (exp_p1_9-exp_p1_c)[rcx]	# p9

	movlpd	xmm9,qword ptr real_26_bits[rip]

	addsd	xmm0,xmm4				# p9+p8

	movsd	xmm11,xmm13				# xh
	andpd	xmm9,xmm3				# x_h
	mulsd	xmm3,qword ptr (exp_p1_1_l-exp_p1_c)[rcx] # x*c1_l

	addsd	xmm0,xmm1				# p9+p8+p7

	subsd	xmm11,xmm9				# xh-x_h

	addsd	xmm0,xmm5				# p9+p8+p7+p6

	subsd	xmm11,xmm14				# x_l=(xh-x_h)-nxl

	mulsd	xmm9,qword ptr (exp_p1_1_h-exp_p1_c)[rcx] # x_h*c1_h

	addsd	xmm0,xmm2				# p9+p8+p7+p6+p5
	
	movlpd	xmm10,qword ptr (exp_p1_0-exp_p1_c)[rcx]
	mulsd	xmm11,qword ptr (exp_p1_1_h-exp_p1_c)[rcx] # x_l*c1_h
	addsd	xmm10,xmm9				# x_h*c1_h+c0
	movlpd	xmm12,qword ptr (exp_p1_0-exp_p1_c)[rcx]

	addsd	xmm0,xmm7				# p9+p8+p7+p6+p5+p4

	addsd	xmm3,xmm11				# x*c1_l+x_l*c1_h
	subsd	xmm12,xmm10				# c0-(x_h*c1_h+c0)

	addsd	xmm0,xmm8				# p9+p8+p7+p6+p5+p4+p3

	addsd	xmm12,xmm9				# (c0-(x_h*c1_h+c0))+x_h*c1_h

	addsd	xmm0,xmm6				# p9+p8+p7+p6+p5+p4+p3+p2

	addsd	xmm3,xmm12				# (c0-(x_h*c1_h+c0))+x_h*c1_h+x*c1_l+x_l*c1_h

	addsd	xmm0,qword ptr (exp_p1_0_l-exp_p1_c)[rcx]

	addsd	xmm0,xmm3
	addsd	xmm0,xmm10

	mulsd	xmm0,xmm15
	ret

exp_real_3_n:
	movlpd	xmm1,qword ptr real_1_d_ln2[rip]
	mulsd	xmm1,xmm0
	movq	xmm4,qword ptr m_round_c[rip]
	subsd	xmm1,qword ptr real_0_5[rip]

	ucomisd	xmm1,qword ptr real_m_1022[rip]
	jae		exp_real_3_pn

	ucomisd	xmm1,qword ptr real_m_1076[rip]
	jb		exp_real_3_n_large

	movq	xmm9,qword ptr qw_1078[rip]

	call	exp_real_3_pn_

	mulsd	xmm0,qword ptr real_2_p_m_55[rip]
	ret

exp_real_3:
	movlpd	xmm1,qword ptr real_1_d_ln2[rip]
	mulsd	xmm1,xmm0
	movq	xmm4,qword ptr round_c[rip]
	addsd	xmm1,qword ptr real_0_5[rip]

	ucomisd	xmm1,qword ptr real_1024[rip]
	jae	exp_real_3_large

exp_real_3_pn:
	movq	xmm9,qword ptr qw_1023[rip]

exp_real_3_pn_:
	movq	xmm2,xmm1
	psrlq	xmm1,52
	psubq	xmm4,xmm1
	movq	xmm1,qword ptr mask_all_one[rip]
	psllq	xmm1,xmm4
	andpd	xmm1,xmm2

	movlpd	xmm13,qword ptr real_ln2_42[rip]
	movlpd	xmm14,qword ptr real_ln2_42_l[rip]

	mulsd	xmm13,xmm1
	mulsd	xmm14,xmm1

	cvtpd2dq xmm15,xmm1
	subsd	xmm0,xmm13

	movsd	xmm13,xmm0
	subsd	xmm0,xmm14

	paddq	xmm15,xmm9
	psllq	xmm15,52
	jmp		exp_real_

exp_real_3_large:
	ucomisd	xmm1,qword ptr real_1025[rip]
	jae		exp_real_3_larger

	movq	xmm9,qword ptr qw_1022[rip]

	call	exp_real_3_pn_

	mulsd	xmm0,qword ptr real_2_0[rip]
	ret

exp_real_3_larger:
	ucomisd	xmm0,qword ptr real_max[rip]
	ja		exp_real_3_inf_or_nan
	movlpd	xmm0,qword ptr qword ptr real_2_p_1023[rip]
	mulsd	xmm0,xmm0
exp_real_3_inf_or_nan:
	ret

exp_real_3_n_large:
	jp		exp_real_3_inf_or_nan	# nan
	movlpd	xmm0,qword ptr real_0_0[rip]
	ret

	.global	ln_real

ln_real:
	ucomisd	xmm0,qword ptr real_0_8243[rip]
	jb		ln_real_small			# x<0.82436063535006407342 | nan
	ucomisd	xmm0,qword ptr real_1_6487[rip]
	ja		ln_real_large			# x>1.6487212707001281468
	movlpd	xmm2,qword ptr real_1_0[rip]

	ucomisd	xmm0,qword ptr real_7_d_6[rip]
	ja		ln_real_a_7_d_6

	ucomisd	xmm0,xmm2

	subsd	xmm0,xmm2

	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	jae		ln_real_0
	jmp		ln_real_s

ln_real_small:
	ucomisd	xmm0,qword ptr real_2_p_m_1022[rip]
	jae		ln_real_

	ucomisd	xmm0,qword ptr real_0_0[rip]
	jbe		ln_real_less_or_equal_0_or_nan

# denormalized number

	mulsd	xmm0,qword ptr real_2_p_55[rip]

	movlpd	xmm1,qword ptr mask_significand[rip]
	andpd	xmm1,xmm0
	psrlq	xmm0,52

	movlpd	xmm2,qword ptr real_1_0[rip]
	movlpd	xmm3,qword ptr real_0_5[rip]
	orpd	xmm2,xmm1
	orpd	xmm3,xmm1

	ucomisd	xmm2,qword ptr real_1_6487[rip]
	jbe		ln_real_dn_g1

	subsd	xmm3,qword ptr real_1_0[rip]
	psubq	xmm0,xmmword ptr qw_1077[rip]
	jmp		ln_real_l1_

ln_real_dn_g1:
	ucomisd	xmm2,qword ptr real_7_d_6[rip]

	subsd	xmm2,qword ptr real_1_0[rip]
	psubq	xmm0,xmmword ptr qw_1078[rip]

	ja		ln_real_g_7_d_6
	jmp		ln_real_g1_

ln_real_large:
	ucomisd	xmm0,qword ptr real_max[rip]
	ja		ln_real_inf_or_nan

ln_real_:
	movlpd	xmm1,qword ptr mask_significand[rip]
	andpd	xmm1,xmm0
	psrlq	xmm0,52

	movlpd	xmm2,qword ptr real_1_0[rip]
	movlpd	xmm3,qword ptr real_0_5[rip]
	orpd	xmm2,xmm1
	orpd	xmm3,xmm1

	ucomisd	xmm2,qword ptr real_1_6487[rip]
	jbe		ln_real_g1
	jmp		ln_real_l1

ln_real_0:
	movlpd	xmm3,qword ptr ln_b_q_1[rip]
	movlpd	xmm2,qword ptr ln_b_p_1[rip]

	mulsd	xmm3,xmm1				# q1
	mulsd	xmm2,xmm1				# p1
	movsd	xmm7,xmm1				# x
	movlpd	xmm5,qword ptr ln_b_q_2[rip]
	movlpd	xmm4,qword ptr ln_b_p_2[rip]
	movsd	xmm6,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	movsd	xmm11,xmm1				# x
	mulsd	xmm7,xmm6				# x3

	movlpd	xmm9,qword ptr ln_b_q_3[rip]
	movlpd	xmm8,qword ptr ln_b_p_3[rip]

	mulsd	xmm11,xmm0				# x5

	mulsd	xmm5,xmm6				# q2
	mulsd	xmm4,xmm6				# p2

	movlpd	xmm10,qword ptr ln_b_q_4[rip]

	mulsd	xmm9,xmm7				# q3
	mulsd	xmm8,xmm7				# p3
	
	mulsd	xmm10,xmm0				# q4
	mulsd	xmm0,qword ptr ln_b_p_4[rip]	# p4

	addsd	xmm10,xmm11				# q4+x5

	addsd	xmm0,xmm8				# p3+p4
	addsd	xmm9,xmm10				# q3+q4+x5

	movlpd	xmm6,qword ptr real_17_bits[rip]

	addsd	xmm0,xmm4				# p2+p3+p4	
	addsd	xmm5,xmm9				# q2+q3+q4+x5

	andpd	xmm6,xmm1				# x_17_h
	movsd	xmm8,xmm1				# x
	movlpd	xmm4,qword ptr real_0_5[rip]

	addsd	xmm0,xmm2				# p1+p2+p3+p4
	addsd	xmm3,xmm5				# q1+q2+q3+q4+x5

	subsd	xmm8,xmm6				# x_17_l
	mulsd	xmm4,xmm6				# 0.5*x_17_h

	addsd	xmm0,qword ptr ln_b_p_0[rip]	# p0+p1+p2+p3+p4
	addsd	xmm3,qword ptr ln_b_q_0[rip]	# q0+q1+q2+q3+q4+x5

	mulsd	xmm8,qword ptr real_0_5[rip]	# 0.5*x_17_l
	mulsd	xmm4,xmm6				# 0.5*x_17_h*x_17_h
	addsd	xmm6,xmm1				# x+x_17_h

	ucomisd	xmm1,qword ptr real_2_p_m_16[rip]
	jb		ln_real_0_s

	divsd	xmm0,xmm3				# p/q

	subsd	xmm1,xmm4				# x-0.5*x_17_h*x_17_h
	mulsd	xmm6,xmm8				# 0.5*x_17_l*(x+x_17_h)

	mulsd	xmm0,xmm7				# (p/q)*x3
	subsd	xmm0,xmm6				# (p/q)*x3-0.5x2_l
	addsd	xmm0,xmm1				# (p/q)*x3-0.5x2+x
	ret

ln_real_0_s:
	divsd	xmm0,xmm3				# p/q

	mulsd	xmm6,xmm8				# 0.5*x_17_l*(x+x_17_h)

	mulsd	xmm0,xmm7				# (p/q)*x3
	subsd	xmm0,xmm6				# (p/q)*x3-0.5x2_l
	subsd	xmm0,xmm4				# (p/q)*x3-0.5x2
	addsd	xmm0,xmm1				# (p/q)*x3-0.5x2+x
	ret

ln_real_a_7_d_6:
	subsd	xmm0,xmm2

	mulsd	xmm0,qword ptr real_0_75[rip]
	movlpd	xmm1,qword ptr real_0_25[rip]

	lea		rcx,ln_b_c[rip]
	lea		rdx,ln_s_c[rip]

	ucomisd	xmm0,xmm1
	subsd	xmm0,xmm1

	cmovb	rcx,rdx

	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	movlpd	xmm3,qword ptr (ln_b_q_1-ln_b_c)[rcx]
	movlpd	xmm2,qword ptr (ln_b_p_1-ln_b_c)[rcx]

	mulsd	xmm3,xmm1				# q1
	mulsd	xmm2,xmm1				# p1
	movsd	xmm7,xmm1				# x
	movlpd	xmm5,qword ptr (ln_b_q_2-ln_b_c)[rcx]
	movlpd	xmm4,qword ptr (ln_b_p_2-ln_b_c)[rcx]
	movsd	xmm6,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	movsd	xmm11,xmm1				# x
	mulsd	xmm7,xmm6				# x3

	movlpd	xmm9,qword ptr (ln_b_q_3-ln_b_c)[rcx]
	movlpd	xmm8,qword ptr (ln_b_p_3-ln_b_c)[rcx]

	mulsd	xmm11,xmm0				# x5

	mulsd	xmm5,xmm6				# q2
	mulsd	xmm4,xmm6				# p2

	movlpd	xmm6,qword ptr real_17_bits[rip]
	movlpd	xmm10,qword ptr (ln_b_q_4-ln_b_c)[rcx]

	mulsd	xmm9,xmm7				# q3
	mulsd	xmm8,xmm7				# p3
	
	andpd	xmm6,xmm1				# x_17_h

	mulsd	xmm10,xmm0				# q4
	mulsd	xmm0,qword ptr (ln_b_p_4-ln_b_c)[rcx] # p4

	addsd	xmm10,xmm11				# q4+x5

	addsd	xmm0,xmm8				# p3+p4
	addsd	xmm9,xmm10				# q3+q4+x5

	movsd	xmm8,xmm1				# x

	addsd	xmm0,xmm4				# p2+p3+p4	
	addsd	xmm5,xmm9				# q2+q3+q4+x5

	movlpd	xmm4,qword ptr real_0_5[rip]
	subsd	xmm8,xmm6				# x_17_l
	mulsd	xmm4,xmm6				# 0.5*x_17_h

	addsd	xmm0,xmm2				# p1+p2+p3+p4
	addsd	xmm3,xmm5				# q1+q2+q3+q4+x5

	mulsd	xmm8,qword ptr real_0_5[rip]	# 0.5*x_17_l
	mulsd	xmm4,xmm6				# 0.5*x_17_h*x_17_h
	addsd	xmm6,xmm1				# x+x_17_h

	addsd	xmm0,qword ptr (ln_b_p_0-ln_b_c)[rcx] # p0+p1+p2+p3+p4
	addsd	xmm3,qword ptr (ln_b_q_0-ln_b_c)[rcx] # q0+q1+q2+q3+q4+x5

	subsd	xmm1,xmm4				# x-0.5*x_17_h*x_17_h
	mulsd	xmm6,xmm8				# 0.5*x_17_l*(x+x_17_h)

	divsd	xmm0,xmm3				# p/q

	movlpd	xmm2,qword ptr ln_4_d_3_53[rip]
	movlpd	xmm4,qword ptr ln_4_d_3_53_l[rip]
	addsd	xmm2,xmm1
	subsd	xmm4,xmm6

	movlpd	xmm3,qword ptr ln_4_d_3_53[rip]
	subsd	xmm3,xmm2

	mulsd	xmm0,xmm7				# (p/q)*x3

	addsd	xmm3,xmm1
	addsd	xmm3,xmm4

	addsd	xmm0,xmm3
	addsd	xmm0,xmm2
	ret

ln_real_g1:
	ucomisd	xmm2,qword ptr real_7_d_6[rip]

	subsd	xmm2,qword ptr real_1_0[rip]

	psubq	xmm0,xmmword ptr qw_1023[rip]

	ja		ln_real_g_7_d_6

ln_real_g1_:
	movsd	xmm1,xmm2				# x
	mulsd	xmm2,xmm2				# x2

	movlpd	xmm4,qword ptr ln_b_q_1[rip]
	movlpd	xmm3,qword ptr ln_b_p_1[rip]
	mulsd	xmm4,xmm1				# q1
	mulsd	xmm3,xmm1				# p1
	movsd	xmm8,xmm1				# x

	cvtdq2pd xmm0,xmm0

	movlpd	xmm6,qword ptr ln_b_q_2[rip]
	movlpd	xmm5,qword ptr ln_b_p_2[rip]
	movsd	xmm7,xmm2				# x2
	mulsd	xmm2,xmm2				# x4

	movsd	xmm12,xmm1				# x
	mulsd	xmm8,xmm7				# x3

	movlpd	xmm10,qword ptr ln_b_q_3[rip]
	movlpd	xmm9,qword ptr ln_b_p_3[rip]

	mulsd	xmm12,xmm2				# x5

	mulsd	xmm6,xmm7				# q2
	mulsd	xmm5,xmm7				# p2

	movlpd	xmm11,qword ptr ln_b_p_4[rip]

	mulsd	xmm10,xmm8				# q3
	mulsd	xmm9,xmm8				# p3
	
	mulsd	xmm11,xmm2				# p4
	mulsd	xmm2,qword ptr ln_b_q_4[rip] # q4
	
	addsd	xmm2,xmm12				# q4+x5

	addsd	xmm2,xmm10				# q3+q4+x5
	addsd	xmm9,xmm11				# p3+p4

	movlpd	xmm7,qword ptr real_17_bits[rip]

	addsd	xmm2,xmm6				# q2+q3+q4+x5
	addsd	xmm5,xmm9				# p2+p3+p4
	
	andpd	xmm7,xmm1				# x_17_h
	movsd	xmm14,xmm1				# x
	movlpd	xmm13,qword ptr real_0_5[rip]

	movlpd	xmm6,qword ptr real_ln2_42_l[rip]
	
	addsd	xmm2,xmm4				# q1+q2+q3+q4+x5
	addsd	xmm3,xmm5				# p1+p2+p3+p4
	
	subsd	xmm14,xmm7				# x_17_l
	mulsd	xmm13,xmm7				# 0.5*x_17_h

	mulsd	xmm6,xmm0
	mulsd	xmm0,qword ptr real_ln2_42[rip]
	
	addsd	xmm2,qword ptr ln_b_q_0[rip]	# q0+q1+q2+q3+q4+x5
	addsd	xmm3,qword ptr ln_b_p_0[rip]	# p0+p1+p2+p3+p4

	mulsd	xmm14,qword ptr real_0_5[rip] # 0.5*x_17_l
	mulsd	xmm13,xmm7				# 0.5*x_17_h*x_17_h
	addsd	xmm7,xmm1				# x+x_17_h

	ucomisd	xmm1,qword ptr real_2_p_m_16[rip]
	jb		ln_real_g1_s

ln_real_g1_l:
	divsd	xmm3,xmm2				# p/q

	subsd	xmm1,xmm13				# x-0.5*x_17_h*x_17_h
	mulsd	xmm7,xmm14				# 0.5*x_17_l*(x+x_17_h)

	mulsd	xmm3,xmm8				# (p/q)*x3
	subsd	xmm3,xmm7				# (p/q)*x3-0.5x2_l
	addsd	xmm3,xmm6


	movsd	xmm2,xmm0
	addsd	xmm0,xmm1
	subsd	xmm2,xmm0
	addsd	xmm2,xmm1
	addsd	xmm2,xmm3
	addsd	xmm0,xmm2


#	addsd	xmm1,xmm3				# (p/q)*x3-0.5x2+x
#	addsd	xmm0,xmm1
	ret

ln_real_g1_s:
	divsd	xmm3,xmm2				# p/q

	mulsd	xmm7,xmm14				# 0.5*x_17_l*(x+x_17_h)

	mulsd	xmm3,xmm8				# (p/q)*x3
	subsd	xmm3,xmm7				# (p/q)*x3-0.5x2_l
	addsd	xmm3,xmm6
	subsd	xmm3,xmm13				# (p/q)*x3-0.5x2
	addsd	xmm1,xmm3				# (p/q)*x3-0.5x2_l+x
	addsd	xmm0,xmm1
	ret

ln_real_g_7_d_6:
	mulsd	xmm2,qword ptr real_0_75[rip]
	movlpd	xmm1,qword ptr real_0_25[rip]

	lea		rcx,ln_b_c[rip]
	lea		rdx,ln_s_c[rip]

	ucomisd	xmm2,xmm1
	subsd	xmm2,xmm1

	cmovb	rcx,rdx

	movsd	xmm1,xmm2				# x
	mulsd	xmm2,xmm2				# x2

	movlpd	xmm4,qword ptr (ln_b_q_1-ln_b_c)[rcx]
	movlpd	xmm3,qword ptr (ln_b_p_1-ln_b_c)[rcx]
	mulsd	xmm4,xmm1				# q1
	mulsd	xmm3,xmm1				# p1
	movsd	xmm8,xmm1				# x

	cvtdq2pd xmm0,xmm0

	movlpd	xmm6,qword ptr (ln_b_q_2-ln_b_c)[rcx]
	movlpd	xmm5,qword ptr (ln_b_p_2-ln_b_c)[rcx]
	movsd	xmm7,xmm2				# x2
	mulsd	xmm2,xmm2				# x4

	movsd	xmm12,xmm1				# x
	mulsd	xmm8,xmm7				# x3

	movlpd	xmm10,qword ptr (ln_b_q_3-ln_b_c)[rcx]
	movlpd	xmm9,qword ptr (ln_b_p_3-ln_b_c)[rcx]

	mulsd	xmm12,xmm2				# x5

	mulsd	xmm6,xmm7				# q2
	mulsd	xmm5,xmm7				# p2

	movlpd	xmm11,qword ptr (ln_b_p_4-ln_b_c)[rcx]

	mulsd	xmm10,xmm8				# q3
	mulsd	xmm9,xmm8				# p3
	
	mulsd	xmm11,xmm2				# p4
	mulsd	xmm2,qword ptr (ln_b_q_4-ln_b_c)[rcx] # q4
	
	addsd	xmm2,xmm12				# q4+x5

	addsd	xmm2,xmm10				# q3+q4+x5
	addsd	xmm9,xmm11				# p3+p4

	movlpd	xmm7,qword ptr real_17_bits[rip]

	addsd	xmm2,xmm6				# q2+q3+q4+x5
	addsd	xmm5,xmm9				# p2+p3+p4
	
	andpd	xmm7,xmm1				# x_17_h
	movsd	xmm14,xmm1				# x
	movlpd	xmm13,qword ptr real_0_5[rip]

	movlpd	xmm6,qword ptr real_ln2_42_l[rip]
	
	addsd	xmm2,xmm4				# q1+q2+q3+q4+x5
	addsd	xmm3,xmm5				# p1+p2+p3+p4
	
	subsd	xmm14,xmm7				# x_17_l
	mulsd	xmm13,xmm7				# 0.5*x_17_h

	mulsd	xmm6,xmm0
	mulsd	xmm0,qword ptr real_ln2_42[rip]
	
	addsd	xmm2,qword ptr (ln_b_q_0-ln_b_c)[rcx] # q0+q1+q2+q3+q4+x5
	addsd	xmm3,qword ptr (ln_b_p_0-ln_b_c)[rcx] # p0+p1+p2+p3+p4

	mulsd	xmm14,qword ptr real_0_5[rip] # 0.5*x_17_l
	mulsd	xmm13,xmm7				# 0.5*x_17_h*x_17_h
	addsd	xmm7,xmm1				# x+x_17_h

	addsd	xmm0,qword ptr ln_4_d_3_42[rip]
	addsd	xmm6,qword ptr ln_4_d_3_42_l[rip]
	jmp		ln_real_g1_l

ln_real_s:
	movlpd	xmm3,qword ptr ln_s_q_1[rip]
	movlpd	xmm2,qword ptr ln_s_p_1[rip]

	mulsd	xmm3,xmm1				# q1
	mulsd	xmm2,xmm1				# p1
	movsd	xmm7,xmm1				# x
	movlpd	xmm5,qword ptr ln_s_q_2[rip]
	movlpd	xmm4,qword ptr ln_s_p_2[rip]
	movsd	xmm6,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	movsd	xmm11,xmm1				# x
	mulsd	xmm7,xmm6				# x3

	movlpd	xmm9,qword ptr ln_s_q_3[rip]
	movlpd	xmm8,qword ptr ln_s_p_3[rip]

	mulsd	xmm11,xmm0				# x5

	mulsd	xmm5,xmm6				# q2
	mulsd	xmm4,xmm6				# p2

	movlpd	xmm10,qword ptr ln_s_q_4[rip]

	mulsd	xmm9,xmm7				# q3
	mulsd	xmm8,xmm7				# p3
	
	mulsd	xmm10,xmm0				# q4
	mulsd	xmm0,qword ptr ln_s_p_4[rip]	# p4

	addsd	xmm10,xmm11				# q4+x5

	addsd	xmm0,xmm8				# p3+p4
	addsd	xmm9,xmm10				# q3+q4+x5

	movlpd	xmm6,qword ptr real_17_bits[rip]

	addsd	xmm0,xmm4				# p2+p3+p4	
	addsd	xmm5,xmm9				# q2+q3+q4+x5

	andpd	xmm6,xmm1				# x_17_h
	movsd	xmm8,xmm1				# x
	movlpd	xmm4,qword ptr real_0_5[rip]

	addsd	xmm0,xmm2				# p1+p2+p3+p4
	addsd	xmm3,xmm5				# q1+q2+q3+q4+x5

	subsd	xmm8,xmm6				# x_17_l
	mulsd	xmm4,xmm6				# 0.5*x_17_h

	addsd	xmm0,qword ptr ln_s_p_0[rip]	# p0+p1+p2+p3+p4
	addsd	xmm3,qword ptr ln_s_q_0[rip]	# q0+q1+q2+q3+q4+x5

	mulsd	xmm8,qword ptr real_0_5[rip] # 0.5*x_17_l
	mulsd	xmm4,xmm6				# 0.5*x_17_h*x_17_h
	addsd	xmm6,xmm1				# x+x_17_h

	ucomisd	xmm1,qword ptr real_m_2_p_m_16[rip]
	ja		ln_real_s_s

	divsd	xmm0,xmm3				# p/q

	subsd	xmm1,xmm4				# x-0.5*x_17_h*x_17_h
	mulsd	xmm6,xmm8				# 0.5*x_17_l*(x+x_17_h)

	mulsd	xmm0,xmm7				# (p/q)*x3
	subsd	xmm0,xmm6				# (p/q)*x3-0.5x2_l
	addsd	xmm0,xmm1				# (p/q)*x3-0.5x2+x
	ret

ln_real_s_s:
	divsd	xmm0,xmm3				# p/q

	mulsd	xmm6,xmm8				# 0.5*x_17_l*(x+x_17_h)

	mulsd	xmm0,xmm7				# (p/q)*x3
	subsd	xmm0,xmm6				# (p/q)*x3-0.5x2_l
	subsd	xmm0,xmm4				# (p/q)*x3-0.5x2
	addsd	xmm0,xmm1				# (p/q)*x3-0.5x2+x
	ret
	

ln_real_l1:
	subsd	xmm3,qword ptr real_1_0[rip]

	psubq	xmm0,xmmword ptr qw_1022[rip]
ln_real_l1_:
	movsd	xmm1,xmm3				# x
	mulsd	xmm3,xmm3				# x2

	movlpd	xmm4,qword ptr ln_s_q_1[rip]
	movlpd	xmm2,qword ptr ln_s_p_1[rip]
	mulsd	xmm4,xmm1				# q1
	mulsd	xmm2,xmm1				# p1
	movsd	xmm8,xmm1				# x

	cvtdq2pd xmm0,xmm0

	movlpd	xmm6,qword ptr ln_s_q_2[rip]
	movlpd	xmm5,qword ptr ln_s_p_2[rip]
	movsd	xmm7,xmm3				# x2
	mulsd	xmm3,xmm3				# x4

	movsd	xmm12,xmm1				# x
	mulsd	xmm8,xmm7				# x3

	movlpd	xmm10,qword ptr ln_s_q_3[rip]
	movlpd	xmm9,qword ptr ln_s_p_3[rip]

	mulsd	xmm12,xmm3				# x5

	mulsd	xmm6,xmm7				# q2
	mulsd	xmm5,xmm7				# p2

	movlpd	xmm11,qword ptr ln_s_p_4[rip]

	mulsd	xmm10,xmm8				# q3
	mulsd	xmm9,xmm8				# p3
	
	mulsd	xmm11,xmm3				# p4
	mulsd	xmm3,qword ptr ln_s_q_4[rip] # q4

	addsd	xmm3,xmm12				# q4+x5

	addsd	xmm3,xmm10				# q3+q4+x5
	addsd	xmm9,xmm11				# p3+p4

	movlpd	xmm7,qword ptr real_17_bits[rip]

	addsd	xmm3,xmm6				# q2+q3+q4+x5
	addsd	xmm5,xmm9				# p2+p3+p4	

	andpd	xmm7,xmm1				# x_17_h
	movsd	xmm14,xmm1				# x
	movlpd	xmm13,qword ptr real_0_5[rip]

	movlpd	xmm6,qword ptr real_ln2_42_l[rip]

	addsd	xmm3,xmm4				# q1+q2+q3+q4+x5
	addsd	xmm2,xmm5				# p1+p2+p3+p4

	subsd	xmm14,xmm7				# x_17_l
	mulsd	xmm13,xmm7				# 0.5*x_17_h

	mulsd	xmm6,xmm0
	mulsd	xmm0,qword ptr real_ln2_42[rip]

	addsd	xmm3,qword ptr ln_s_q_0[rip]	# q0+q1+q2+q3+q4+x5
	addsd	xmm2,qword ptr ln_s_p_0[rip]	# p0+p1+p2+p3+p4

	mulsd	xmm14,qword ptr real_0_5[rip] # 0.5*x_17_l
	mulsd	xmm13,xmm7				# 0.5*x_17_h*x_17_h
	addsd	xmm7,xmm1				# x+x_17_h

	ucomisd	xmm1,qword ptr real_m_2_p_m_16[rip]
	ja		ln_real_l1_s

	divsd	xmm2,xmm3				# p/q

	subsd	xmm1,xmm13				# x-0.5*x_17_h*x_17_h
	mulsd	xmm7,xmm14				# 0.5*x_17_l*(x+x_17_h)

	mulsd	xmm2,xmm8				# (p/q)*x3
	subsd	xmm2,xmm7				# (p/q)*x3-0.5x2_l
	addsd	xmm2,xmm6


	movsd	xmm3,xmm0
	addsd	xmm0,xmm1
	subsd	xmm3,xmm0
	addsd	xmm3,xmm1
	addsd	xmm3,xmm2
	addsd	xmm0,xmm3

#	addsd	xmm1,xmm2				# (p/q)*x3-0.5x2+x
#	addsd	xmm0,xmm1
	ret

ln_real_l1_s:
	divsd	xmm2,xmm3				# p/q

	mulsd	xmm7,xmm14				# 0.5*x_17_l*(x+x_17_h)

	mulsd	xmm2,xmm8				# (p/q)*x3
	subsd	xmm2,xmm7				# (p/q)*x3-0.5x2_l
	addsd	xmm2,xmm6
	subsd	xmm2,xmm13				# (p/q)*x3-0.5x2
	addsd	xmm1,xmm2				# (p/q)*x3-0.5x2+x
	addsd	xmm0,xmm1
	ret

ln_real_less_or_equal_0_or_nan:
	jb		ln_real_less_0_or_nan	# x<0.0 | nan

	movsd	xmm0,qword ptr real_m_1_0[rip]
	divsd	xmm0,qword ptr real_0_0[rip]	# yield -inf
	ret

ln_real_less_0_or_nan:
	jp		ln_real_inf_or_nan		# nan

	movsd	xmm0,qword ptr real_0_0[rip]	# yield nan
	divsd	xmm0,xmm0

ln_real_inf_or_nan:
	ret

	.global	log10_real

log10_real:
#	ucomisd	xmm0,qword ptr real_0_7025
	ucomisd	xmm0,qword ptr real_0_833[rip]
#	jb		log10_real_small			# x<0.7025 | nan
	jb		log10_real_small			# x<0.833 | nan
	ucomisd	xmm0,qword ptr real_1_666[rip]
	ja		log10_real_large			# x>1.666

	movlpd	xmm2,qword ptr real_1_0[rip]

	ucomisd	xmm0,qword ptr real_7_d_6[rip]
	ja		log10_real_a_7_d_6

	ucomisd	xmm0,xmm2

	subsd	xmm0,xmm2

	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	jae		log10_real_0
	jmp		log10_real_s

log10_real_small:
	ucomisd	xmm0,qword ptr real_2_p_m_1022[rip]
	jae		log10_real_

	ucomisd	xmm0,qword ptr real_0_0[rip]
	jbe		log10_real_less_or_equal_0_or_nan

# denormalized number

	mulsd	xmm0,qword ptr real_2_p_55[rip]

	movlpd	xmm1,qword ptr mask_significand[rip]
	andpd	xmm1,xmm0
	psrlq	xmm0,52

	movlpd	xmm2,qword ptr real_1_0[rip]
	movlpd	xmm3,qword ptr real_0_5[rip]
	orpd	xmm2,xmm1
	orpd	xmm3,xmm1

#	ucomisd	xmm2,qword ptr real_1_405
	ucomisd	xmm2,qword ptr real_1_666[rip]
	jbe		log10_real_dn_g1

	subsd	xmm3,qword ptr real_1_0[rip]
	psubq	xmm0,xmmword ptr qw_1077[rip]
	jmp		log10_real_l1_

log10_real_dn_g1:
	ucomisd	xmm2,qword ptr real_7_d_6[rip]

	subsd	xmm2,qword ptr real_1_0[rip]
	psubq	xmm0,xmmword ptr qw_1078[rip]

	ja		log10_real_g_7_d_6
	jmp		log10_real_g1_

log10_real_large:
	ucomisd	xmm0,qword ptr real_max[rip]
	ja		log10_real_inf_or_nan

log10_real_:
	movlpd	xmm1,qword ptr mask_significand[rip]
	andpd	xmm1,xmm0
	psrlq	xmm0,52

	movlpd	xmm2,qword ptr real_1_0[rip]
	movlpd	xmm3,qword ptr real_0_5[rip]
	orpd	xmm2,xmm1
	orpd	xmm3,xmm1

#	ucomisd	xmm2,qword ptr real_1_405
	ucomisd	xmm2,qword ptr real_1_666[rip]
	jbe		log10_real_g1
	jmp		log10_real_l1

log10_real_0:
	movlpd	xmm2,qword ptr log10_b_p_1[rip]
	movlpd	xmm3,qword ptr log10_b_q_1[rip]
	mulsd	xmm2,xmm1				# p1
	mulsd	xmm3,xmm1				# q1
	movsd	xmm7,xmm1				# x

	movlpd	xmm4,qword ptr log10_b_p_2[rip]
	movlpd	xmm5,qword ptr log10_b_q_2[rip]
	mulsd	xmm7,xmm0				# x3
	movsd	xmm6,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	movlpd	xmm8,qword ptr log10_b_p_3[rip]
	movlpd	xmm9,qword ptr log10_b_q_3[rip]

	mulsd	xmm4,xmm6				# p2
	mulsd	xmm5,xmm6				# q2

	movlpd	xmm10,qword ptr log10_b_p_4[rip]

	mulsd	xmm8,xmm7				# p3
	mulsd	xmm9,xmm7				# q3

	movsd	xmm11,xmm7				# x3
	mulsd	xmm7,xmm6				# x5
	
	mulsd	xmm10,xmm0				# p4
	mulsd	xmm0,qword ptr log10_b_q_4[rip] # q4

	addsd	xmm0,xmm7				# q4+x5

	addsd	xmm9,xmm0				# q3+q4+x5
	addsd	xmm8,xmm10				# p3+p4

	mulsd	xmm6,qword ptr real_0_5[rip] # 0.5x2

	addsd	xmm9,xmm5				# q2+q3+q4+x5
	addsd	xmm4,xmm8				# p2+p3+p4	

	addsd	xmm9,xmm3				# q1+q2+q3+q4+x5
	addsd	xmm2,xmm4				# p1+p2+p3+p4

	movlpd	xmm4,qword ptr real_26_bits[rip]
	movsd	xmm0,xmm1				# x

	addsd	xmm9,qword ptr log10_b_q_0[rip] # q0+q1+q2+q3+q4+x5
	addsd	xmm2,qword ptr log10_b_p_0[rip] # p0+p1+p2+p3+p4

	subsd	xmm1,xmm6				# x-0.5x2

	divsd	xmm2,xmm9				# p/q

	andpd	xmm4,xmm1				# (x-0.5x2)_h
	subsd	xmm0,xmm4				# x-(x-0.5x2)_h
	subsd	xmm0,xmm6				# (x-0.5x2)_l

	mulsd	xmm2,xmm11				# (p/q)*x3

	mulsd	xmm1,qword ptr d1ln10_26_l[rip] # (x-0.5x2) * (1/ln 10)_l
	mulsd	xmm0,qword ptr d1ln10_26[rip] # (x-0.5x2)_l * (1/ln 10)_h
	mulsd	xmm4,qword ptr d1ln10_26[rip] # (x-0.5x2)_h * (1/ln 10)_h

	addsd	xmm0,xmm1				# (x-0.5x2) * (1/ln 10)_l+(x-0.5x2)_l * (1/ln 10)_h
	addsd	xmm0,xmm2
	addsd	xmm0,xmm4				# (x-0.5x2)*(1/ln 10) + (p/q)*x3

	ret

#log10_real_0_:
#	movlpd	xmm2,qword ptr log10_b_p_1
#	movlpd	xmm10,qword ptr log10_b_q_1
#	mulsd	xmm2,xmm1				# p1
#	mulsd	xmm10,xmm1				# q1
#	movsd	xmm7,xmm1				# x
#
#	movlpd	xmm11,qword ptr log10_b_p_2
#	movlpd	xmm5,qword ptr log10_b_q_2
#	mulsd	xmm7,xmm0				# x3
#	movsd	xmm6,xmm0				# x2
#	mulsd	xmm0,xmm0				# x4
#
#	movlpd	xmm8,qword ptr log10_b_p_3
#	movlpd	xmm9,qword ptr log10_b_q_3
#
##	mulsd	xmm11,xmm6				# p2
#	mulsd	xmm5,xmm6				# q2
#
#	movlpd	xmm3,qword ptr log10_b_p_4
#
#	mulsd	xmm8,xmm7				# p3
#	mulsd	xmm9,xmm7				# q3
#
#	mulsd	xmm6,xmm7				# x5
#
#	mulsd	xmm3,xmm0				# p4
#	mulsd	xmm0,qword ptr log10_b_q_4 # q4
#	
#	movsd	xmm4,xmm1				# x
#	addsd	xmm0,xmm6				# q4+x5
#	movlpd	xmm6,qword ptr real_m_0_5
#
#	addsd	xmm9,xmm0				# q3+q4+x5
#	addsd	xmm8,xmm3				# p3+p4
#
#	movlpd	xmm0,qword ptr real_14_bits
#
#	andpd	xmm0,xmm1				# x_h
#	mulsd	xmm6,xmm1 				# -0.5x
#
#	addsd	xmm9,xmm5				# q2+q3+q4+x5
#	addsd	xmm11,xmm8				# p2+p3+p4	
#
#	movsd	xmm3,xmm1				# x
#	subsd	xmm4,xmm0				# x_l
#	addsd	xmm6,qword ptr real_1_0	# 1-0.5x
#	movlpd	xmm5,qword ptr real_13_bits
#
#	addsd	xmm9,xmm10				# q1+q2+q3+q4+x5
#	addsd	xmm2,xmm11				# p1+p2+p3+p4
#	
#	andpd	xmm5,xmm6				# (1-0.5x)_h
#	mulsd	xmm3,xmm6				# (1-0.5x)*x = x-0.5x2
#
#	addsd	xmm9,qword ptr log10_b_q_0 # q0+q1+q2+q3+q4+x5
#	addsd	xmm2,qword ptr log10_b_p_0 # p0+p1+p2+p3+p4
#
#	subsd	xmm6,xmm5				# (1-0.5x)_l
#	mulsd	xmm0,xmm5				# (1-0.5x)_h*x_h = (x-0.5x2)_h
#	mulsd	xmm4,xmm5				# (1-0.5x)_h*x_l
#
#	divsd	xmm2,xmm9				# p/q
#
#	mulsd	xmm3,qword ptr d1ln10_26_l # (x-0.5x2) * (1/ln 10)_l
#	mulsd	xmm6,xmm1				# (1-0.5x)_l*x
#	mulsd	xmm0,qword ptr d1ln10_26 # (x-0.5x2)_h * (1/ln 10)_h
#
#	addsd	xmm6,xmm4				# (x-0.5x2)_l
#
#	mulsd	xmm6,qword ptr d1ln10_26 # (x-0.5x2)_l * (1/ln 10)_h
#
#	mulsd	xmm2,xmm7				# (p/q)*x3
#
#	addsd	xmm6,xmm3
#	
#	addsd	xmm2,xmm6
#	
#	addsd	xmm0,xmm2
#
#	ret

log10_real_a_7_d_6:
	subsd	xmm0,xmm2

	mulsd	xmm0,qword ptr real_0_75[rip]
	movlpd	xmm1,qword ptr real_0_25[rip]

	lea		rcx,log10_b_c[rip]
	lea		rdx,log10_s_c[rip]

	ucomisd	xmm0,xmm1
	subsd	xmm0,xmm1

	cmovb	rcx,rdx

	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	movlpd	xmm2,qword ptr (log10_b_p_1-log10_b_c)[rcx]
	movlpd	xmm3,qword ptr (log10_b_q_1-log10_b_c)[rcx]
	mulsd	xmm2,xmm1				# p1
	mulsd	xmm3,xmm1				# q1
	movsd	xmm7,xmm1				# x

	movlpd	xmm4,qword ptr (log10_b_p_2-log10_b_c)[rcx]
	movlpd	xmm5,qword ptr (log10_b_q_2-log10_b_c)[rcx]
	mulsd	xmm7,xmm0				# x3
	movsd	xmm6,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	movlpd	xmm8,qword ptr (log10_b_p_3-log10_b_c)[rcx]
	movlpd	xmm9,qword ptr (log10_b_q_3-log10_b_c)[rcx]

	mulsd	xmm4,xmm6				# p2
	mulsd	xmm5,xmm6				# q2

	movlpd	xmm10,qword ptr (log10_b_p_4-log10_b_c)[rcx]

	mulsd	xmm8,xmm7				# p3
	mulsd	xmm9,xmm7				# q3

	movsd	xmm11,xmm7				# x3
	mulsd	xmm7,xmm6				# x5
	
	mulsd	xmm10,xmm0				# p4
	mulsd	xmm0,qword ptr (log10_b_q_4-log10_b_c)[rcx] # q4

	addsd	xmm0,xmm7				# q4+x5

	addsd	xmm9,xmm0				# q3+q4+x5
	addsd	xmm8,xmm10				# p3+p4

	mulsd	xmm6,qword ptr real_0_5[rip] # 0.5x2

	addsd	xmm9,xmm5				# q2+q3+q4+x5
	addsd	xmm4,xmm8				# p2+p3+p4	

	addsd	xmm9,xmm3				# q1+q2+q3+q4+x5
	addsd	xmm2,xmm4				# p1+p2+p3+p4

	movlpd	xmm4,qword ptr real_26_bits[rip]
	movsd	xmm0,xmm1				# x

	addsd	xmm9,qword ptr (log10_b_q_0-log10_b_c)[rcx] # q0+q1+q2+q3+q4+x5
	addsd	xmm2,qword ptr (log10_b_p_0-log10_b_c)[rcx] # p0+p1+p2+p3+p4

	subsd	xmm1,xmm6				# x-0.5x2

	divsd	xmm2,xmm9				# p/q

	andpd	xmm4,xmm1				# (x-0.5x2)_h
	subsd	xmm0,xmm4				# x-(x-0.5x2)_h
	subsd	xmm0,xmm6				# (x-0.5x2)_l

	mulsd	xmm2,xmm11				# (p/q)*x3

	mulsd	xmm1,qword ptr d1ln10_26_l[rip] # (x-0.5x2) * (1/ln 10)_l
	mulsd	xmm0,qword ptr d1ln10_26[rip] # (x-0.5x2)_l * (1/ln 10)_h
	mulsd	xmm4,qword ptr d1ln10_26[rip] # (x-0.5x2)_h * (1/ln 10)_h

	addsd	xmm0,xmm1				# (x-0.5x2) * (1/ln 10)_l+(x-0.5x2)_l * (1/ln 10)_h

	movlpd	xmm3,qword ptr log10_4_d_3_53[rip]
	movlpd	xmm5,qword ptr log10_4_d_3_53[rip]

	addsd	xmm3,xmm4
	addsd	xmm0,qword ptr log10_4_d_3_53_l[rip]

	subsd	xmm5,xmm3

	addsd	xmm5,xmm4
	
	addsd	xmm0,xmm5

	addsd	xmm0,xmm2
	addsd	xmm0,xmm3				# (x-0.5x2)*(1/ln 10) + (p/q)*x3
	ret

log10_real_g1:
	ucomisd	xmm2,qword ptr real_7_d_6[rip]

	subsd	xmm2,qword ptr real_1_0[rip]

	psubq	xmm0,xmmword ptr qw_1023[rip]

	ja		log10_real_g_7_d_6

log10_real_g1_:
	movsd	xmm1,xmm2				# x
	mulsd	xmm2,xmm2				# x2

	movlpd	xmm11,qword ptr log10_b_p_1[rip]
	movlpd	xmm10,qword ptr log10_b_q_1[rip]
	mulsd	xmm11,xmm1				# p1
	mulsd	xmm10,xmm1				# q1
	movsd	xmm7,xmm1				# x

	cvtdq2pd xmm12,xmm0

	movlpd	xmm0,qword ptr log10_b_p_2[rip]
	movlpd	xmm5,qword ptr log10_b_q_2[rip]
	mulsd	xmm7,xmm2				# x3
	movsd	xmm6,xmm2				# x2
	mulsd	xmm2,xmm2				# x4

	movlpd	xmm8,qword ptr log10_b_p_3[rip]
	movlpd	xmm9,qword ptr log10_b_q_3[rip]

	mulsd	xmm0,xmm6				# p2
	mulsd	xmm5,xmm6				# q2

	movlpd	xmm3,qword ptr log10_b_p_4[rip]

	mulsd	xmm8,xmm7				# p3
	mulsd	xmm9,xmm7				# q3

	mulsd	xmm6,xmm7				# x5

	mulsd	xmm3,xmm2				# p4
	mulsd	xmm2,qword ptr log10_b_q_4[rip] # q4
	
	movsd	xmm4,xmm1				# x
	addsd	xmm2,xmm6				# q4+x5	
	movlpd	xmm6,qword ptr real_m_0_5[rip]

	addsd	xmm9,xmm2				# q3+q4+x5
	addsd	xmm8,xmm3				# p3+p4

	movlpd	xmm13,qword ptr real_log2_10_42_l[rip]
	movlpd	xmm2,qword ptr real_14_bits[rip]

	andpd	xmm2,xmm1				# x_h
	mulsd	xmm6,xmm1 				# -0.5x

	addsd	xmm9,xmm5				# q2+q3+q4+x5
	addsd	xmm0,xmm8				# p2+p3+p4	

	mulsd	xmm13,xmm12
	mulsd	xmm12,qword ptr real_log2_10_42[rip]

	movsd	xmm3,xmm1				# x
	subsd	xmm4,xmm2				# x_l
	addsd	xmm6,qword ptr real_1_0[rip]	# 1-0.5x
	movlpd	xmm5,qword ptr real_13_bits[rip]

	addsd	xmm9,xmm10				# q1+q2+q3+q4+x5
	addsd	xmm0,xmm11				# p1+p2+p3+p4
	
	andpd	xmm5,xmm6				# (1-0.5x)_h
	mulsd	xmm3,xmm6				# (1-0.5x)*x = x-0.5x2

	addsd	xmm9,qword ptr log10_b_q_0[rip] # q0+q1+q2+q3+q4+x5
	addsd	xmm0,qword ptr log10_b_p_0[rip] # p0+p1+p2+p3+p4

	subsd	xmm6,xmm5				# (1-0.5x)_l
	mulsd	xmm2,xmm5				# (1-0.5x)_h*x_h = (x-0.5x2)_h
	mulsd	xmm4,xmm5				# (1-0.5x)_h*x_l

	divsd	xmm0,xmm9				# p/q

	mulsd	xmm3,qword ptr d1ln10_26_l[rip] # (x-0.5x2) * (1/ln 10)_l
	mulsd	xmm6,xmm1				# (1-0.5x)_l*x
	mulsd	xmm2,qword ptr d1ln10_26[rip] # (x-0.5x2)_h * (1/ln 10)_h

	addsd	xmm6,xmm4				# (x-0.5x2)_l

	mulsd	xmm6,qword ptr d1ln10_26[rip] # (x-0.5x2)_l * (1/ln 10)_h

	mulsd	xmm0,xmm7				# (p/q)*x3

	addsd	xmm6,xmm3
	
	addsd	xmm0,xmm6
	
	addsd	xmm0,xmm13

	movsd	xmm3,xmm2
	addsd	xmm2,xmm12
	subsd	xmm12,xmm2
	addsd	xmm12,xmm3
	addsd	xmm0,xmm12
	addsd	xmm0,xmm2

#	addsd	xmm0,xmm2
#	addsd	xmm0,xmm12

	ret

log10_real_g_7_d_6:
	mulsd	xmm2,qword ptr real_0_75[rip]
	movlpd	xmm1,qword ptr real_0_25[rip]

	lea		rcx,log10_b_c[rip]
	lea		rdx,log10_s_c[rip]

	ucomisd	xmm2,xmm1
	subsd	xmm2,xmm1

	cmovb	rcx,rdx

	movsd	xmm1,xmm2				# x
	mulsd	xmm2,xmm2				# x2

	movlpd	xmm3,qword ptr (log10_b_p_1-log10_b_c)[rcx]
	movlpd	xmm4,qword ptr (log10_b_q_1-log10_b_c)[rcx]
	mulsd	xmm3,xmm1				# p1
	mulsd	xmm4,xmm1				# q1
	movsd	xmm8,xmm1				# x

	cvtdq2pd xmm0,xmm0

	movlpd	xmm5,qword ptr (log10_b_p_2-log10_b_c)[rcx]
	movlpd	xmm6,qword ptr (log10_b_q_2-log10_b_c)[rcx]
	mulsd	xmm8,xmm2				# x3
	movsd	xmm7,xmm2				# x2
	mulsd	xmm2,xmm2				# x4

	movlpd	xmm9,qword ptr (log10_b_p_3-log10_b_c)[rcx]
	movlpd	xmm10,qword ptr (log10_b_q_3-log10_b_c)[rcx]

	mulsd	xmm5,xmm7				# p2
	mulsd	xmm6,xmm7				# q2

	movlpd	xmm11,qword ptr (log10_b_p_4-log10_b_c)[rcx]

	mulsd	xmm9,xmm8				# p3
	mulsd	xmm10,xmm8				# q3

	movsd	xmm12,xmm8				# x3
	mulsd	xmm8,xmm7				# x5

	mulsd	xmm11,xmm2				# p4
	mulsd	xmm2,qword ptr (log10_b_q_4-log10_b_c)[rcx] # q4
	
	addsd	xmm2,xmm8				# q4+x5
	
	addsd	xmm10,xmm2				# q3+q4+x5
	addsd	xmm9,xmm11				# p3+p4

	mulsd	xmm7,qword ptr real_0_5[rip] # 0.5x2

	addsd	xmm10,xmm6				# q2+q3+q4+x5
	addsd	xmm5,xmm9				# p2+p3+p4

	movlpd	xmm6,qword ptr real_log2_10_42_l[rip]

	addsd	xmm10,xmm4				# q1+q2+q3+q4+x5
	addsd	xmm3,xmm5				# p1+p2+p3+p4

	movlpd	xmm5,qword ptr real_26_bits[rip]
	movsd	xmm2,xmm1				# x

	mulsd	xmm6,xmm0
	mulsd	xmm0,qword ptr real_log2_10_42[rip]

	addsd	xmm10,qword ptr (log10_b_q_0-log10_b_c)[rcx] # q0+q1+q2+q3+q4+x5
	addsd	xmm3,qword ptr (log10_b_p_0-log10_b_c)[rcx] # p0+p1+p2+p3+p4

	subsd	xmm1,xmm7				# x-0.5x2

	addsd	xmm6,qword ptr log10_4_d_3_42_l[rip]
	addsd	xmm0,qword ptr log10_4_d_3_42[rip]

	divsd	xmm3,xmm10				# p/q

	andpd	xmm5,xmm1				# (x-0.5x2)_h
	subsd	xmm2,xmm5				# x-(x-0.5x2)_h
	subsd	xmm2,xmm7				# (x-0.5x2)_l

	mulsd	xmm3,xmm12				# (p/q)*x3

	mulsd	xmm1,qword ptr d1ln10_26_l[rip] # (x-0.5x2) * (1/ln 10)_l
	mulsd	xmm2,qword ptr d1ln10_26[rip] # (x-0.5x2)_l * (1/ln 10)_h
	mulsd	xmm5,qword ptr d1ln10_26[rip] # (x-0.5x2)_h * (1/ln 10)_h

	addsd	xmm2,xmm1				# (x-0.5x2) * (1/ln 10)_l+(x-0.5x2)_l * (1/ln 10)_h
	addsd	xmm2,xmm3
	addsd	xmm2,xmm6

	movsd	xmm3,xmm0
	addsd	xmm0,xmm5
	subsd	xmm3,xmm0
	addsd	xmm3,xmm5
	addsd	xmm3,xmm2
	addsd	xmm0,xmm3

#	addsd	xmm2,xmm5				# (x-0.5x2)*(1/ln 10) + (p/q)*x3
#	addsd	xmm0,xmm2
	ret

log10_real_s:
	movlpd	xmm2,qword ptr log10_s_p_1[rip]
	movlpd	xmm3,qword ptr log10_s_q_1[rip]
	mulsd	xmm2,xmm1				# p1
	mulsd	xmm3,xmm1				# q1
	movsd	xmm7,xmm1				# x

	movlpd	xmm4,qword ptr log10_s_p_2[rip]
	movlpd	xmm5,qword ptr log10_s_q_2[rip]
	mulsd	xmm7,xmm0				# x3
	movsd	xmm6,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	movlpd	xmm8,qword ptr log10_s_p_3[rip]
	movlpd	xmm9,qword ptr log10_s_q_3[rip]

	mulsd	xmm4,xmm6				# p2
	mulsd	xmm5,xmm6				# q2

	movlpd	xmm10,qword ptr log10_s_p_4[rip]

	mulsd	xmm8,xmm7				# p3
	mulsd	xmm9,xmm7				# q3

	movsd	xmm11,xmm7				# x3
	mulsd	xmm7,xmm6				# x5
	
	mulsd	xmm10,xmm0				# p4
	mulsd	xmm0,qword ptr log10_s_q_4[rip] # q4

	addsd	xmm0,xmm7				# q4+x5

	addsd	xmm9,xmm0				# q3+q4+x5
	addsd	xmm8,xmm10				# p3+p4

	mulsd	xmm6,qword ptr real_0_5[rip] # 0.5x2

	addsd	xmm9,xmm5				# q2+q3+q4+x5
	addsd	xmm4,xmm8				# p2+p3+p4	

	addsd	xmm9,xmm3				# q1+q2+q3+q4+x5
	addsd	xmm2,xmm4				# p1+p2+p3+p4

	movlpd	xmm4,qword ptr real_26_bits[rip]
	movsd	xmm0,xmm1				# x

	addsd	xmm9,qword ptr log10_s_q_0[rip] # q0+q1+q2+q3+q4+x5
	addsd	xmm2,qword ptr log10_s_p_0[rip] # p0+p1+p2+p3+p4

	subsd	xmm1,xmm6				# x-0.5x2

	divsd	xmm2,xmm9				# p/q

	andpd	xmm4,xmm1				# (x-0.5x2)_h
	subsd	xmm0,xmm4				# x-(x-0.5x2)_h
	subsd	xmm0,xmm6				# (x-0.5x2)_l

	mulsd	xmm2,xmm11				# (p/q)*x3

	mulsd	xmm1,qword ptr d1ln10_26_l[rip] # (x-0.5x2) * (1/ln 10)_l
	mulsd	xmm0,qword ptr d1ln10_26[rip] # (x-0.5x2)_l * (1/ln 10)_h
	mulsd	xmm4,qword ptr d1ln10_26[rip] # (x-0.5x2)_h * (1/ln 10)_h

	addsd	xmm0,xmm1				# (x-0.5x2) * (1/ln 10)_l+(x-0.5x2)_l * (1/ln 10)_h
	addsd	xmm0,xmm2
	addsd	xmm0,xmm4				# (x-0.5x2)*(1/ln 10) + (p/q)*x3

	ret

log10_real_l1:
	subsd	xmm3,qword ptr real_1_0[rip]

	psubq	xmm0,xmmword ptr qw_1022[rip]
log10_real_l1_:
	movsd	xmm1,xmm3				# x
	mulsd	xmm3,xmm3				# x2

	movlpd	xmm2,qword ptr log10_s_p_1[rip]
	movlpd	xmm4,qword ptr log10_s_q_1[rip]
	mulsd	xmm2,xmm1				# p1
	mulsd	xmm4,xmm1				# q1
	movsd	xmm8,xmm1				# x

	cvtdq2pd xmm0,xmm0

	movlpd	xmm5,qword ptr log10_s_p_2[rip]
	movlpd	xmm6,qword ptr log10_s_q_2[rip]
	mulsd	xmm8,xmm3				# x3
	movsd	xmm7,xmm3				# x2
	mulsd	xmm3,xmm3				# x4

	movlpd	xmm9,qword ptr log10_s_p_3[rip]
	movlpd	xmm10,qword ptr log10_s_q_3[rip]

	mulsd	xmm5,xmm7				# p2
	mulsd	xmm6,xmm7				# q2

	movlpd	xmm11,qword ptr log10_s_p_4[rip]

	mulsd	xmm9,xmm8				# p3
	mulsd	xmm10,xmm8				# q3

	movsd	xmm12,xmm8				# x3
	mulsd	xmm8,xmm7				# x5

	mulsd	xmm11,xmm3				# p4
	mulsd	xmm3,qword ptr log10_s_q_4[rip] # q4
	
	addsd	xmm3,xmm8				# q4+x5
	
	addsd	xmm10,xmm3				# q3+q4+x5
	addsd	xmm9,xmm11				# p3+p4

	mulsd	xmm7,qword ptr real_0_5[rip] # 0.5x2

	addsd	xmm10,xmm6				# q2+q3+q4+x5
	addsd	xmm5,xmm9				# p2+p3+p4

	movlpd	xmm6,qword ptr real_log2_10_42_l[rip]

	addsd	xmm10,xmm4				# q1+q2+q3+q4+x5
	addsd	xmm2,xmm5				# p1+p2+p3+p4

	movlpd	xmm5,qword ptr real_26_bits[rip]
	movsd	xmm3,xmm1				# x

	mulsd	xmm6,xmm0
	mulsd	xmm0,qword ptr real_log2_10_42[rip]

	addsd	xmm10,qword ptr log10_s_q_0[rip] # q0+q1+q2+q3+q4+x5
	addsd	xmm2,qword ptr log10_s_p_0[rip] # p0+p1+p2+p3+p4

	subsd	xmm1,xmm7				# x-0.5x2

	divsd	xmm2,xmm10				# p/q

	andpd	xmm5,xmm1				# (x-0.5x2)_h
	subsd	xmm3,xmm5				# x-(x-0.5x2)_h
	subsd	xmm3,xmm7				# (x-0.5x2)_l

	mulsd	xmm2,xmm12				# (p/q)*x3

	mulsd	xmm1,qword ptr d1ln10_26_l[rip] # (x-0.5x2) * (1/ln 10)_l
	mulsd	xmm3,qword ptr d1ln10_26[rip] # (x-0.5x2)_l * (1/ln 10)_h
	mulsd	xmm5,qword ptr d1ln10_26[rip] # (x-0.5x2)_h * (1/ln 10)_h

	addsd	xmm3,xmm1				# (x-0.5x2) * (1/ln 10)_l+(x-0.5x2)_l * (1/ln 10)_h
	addsd	xmm3,xmm2
	addsd	xmm3,xmm6

	movsd	xmm2,xmm0
	addsd	xmm0,xmm5
	subsd	xmm2,xmm0
	addsd	xmm2,xmm5
	addsd	xmm2,xmm3
	addsd	xmm0,xmm2

#	addsd	xmm3,xmm5				# (x-0.5x2)*(1/ln 10) + (p/q)*x3
#	addsd	xmm0,xmm3
	ret

log10_real_less_or_equal_0_or_nan:
	jb		log10_real_less_0_or_nan # x<0.0 | nan

	movsd	xmm0,qword ptr real_m_1_0[rip]
	divsd	xmm0,qword ptr real_0_0[rip]	# yield -inf
	ret

log10_real_less_0_or_nan:
	jp		log10_real_inf_or_nan	# nan

	movsd	xmm0,qword ptr real_0_0[rip]	# yield nan
	divsd	xmm0,xmm0

log10_real_inf_or_nan:
	ret


	.global	pow_real

pow_real:
	ucomisd	xmm0,qword ptr real_0_0[rip]
	je		pow_real_to_zero_or_nan	# y==0.0 | nan

	ucomisd	xmm1,qword ptr real_0_83[rip]
	jb		pow_real_small			# x<0.83 | nan
pow_real_not_small:
	ucomisd	xmm1,qword ptr real_1_66[rip]
	ja		pow_real_large

	ucomisd	xmm1,qword ptr real_7_d_6[rip]

	movlpd	xmm2,qword ptr real_1_0[rip]

	ja		pow_real_a_7_d_6

pow_real_between_0_83_and_7_d_6:
	ucomisd	xmm0,qword ptr real_power_exp_too_large[rip]
	ja		pow_real_exp_too_large

	ucomisd	xmm0,qword ptr real_power_exp_too_small[rip]
	jb		pow_real_exp_too_large_m

	ucomisd	xmm1,xmm2
	
	subsd	xmm1,xmm2

	lea		rcx,log2_b_c[rip]
	lea		rdx,log2_s_c[rip]
	cmovb	rcx,rdx

	movsd	xmm5,xmm1				# x
	mulsd	xmm1,xmm1				# x2

	movlpd	xmm2,qword ptr (log2_b_p_1-log2_b_c)[rcx]
	movlpd	xmm4,qword ptr (log2_b_q_1-log2_b_c)[rcx]
	mulsd	xmm2,xmm5				# p1
	mulsd	xmm4,xmm5				# q1
	movsd	xmm8,xmm5				# x
	movlpd	xmm3,qword ptr (log2_b_p_2-log2_b_c)[rcx]
	movlpd	xmm6,qword ptr (log2_b_q_2-log2_b_c)[rcx]
	mulsd	xmm8,xmm1				# x3
	movsd	xmm7,xmm1				# x2
	mulsd	xmm1,xmm1				# x4

	movlpd	xmm9,qword ptr (log2_b_p_3-log2_b_c)[rcx]
	movlpd	xmm10,qword ptr (log2_b_q_3-log2_b_c)[rcx]

	mulsd	xmm3,xmm7				# p2
	mulsd	xmm6,xmm7				# q2

	movlpd	xmm11,qword ptr (log2_b_p_4-log2_b_c)[rcx]

	mulsd	xmm9,xmm8				# p3
	mulsd	xmm10,xmm8				# q3
	
	mulsd	xmm11,xmm1				# p4
	
	addsd	xmm10,xmm1				# q3+x4
	addsd	xmm9,xmm11				# p3+p4

	mulsd	xmm7,qword ptr real_0_5[rip] # 0.5x2

	addsd	xmm10,xmm6				# q2+q3+x4
	addsd	xmm3,xmm9				# p2+p3+p4	
	addsd	xmm10,xmm4				# q1+q2+q3+x4
	addsd	xmm2,xmm3				# p1+p2+p3+p4

	movlpd	xmm3,qword ptr real_26_bits[rip]
	movsd	xmm1,xmm5				# x

	addsd	xmm10,qword ptr (log2_b_q_0-log2_b_c)[rcx] # q0+q1+q2+q3+x4
	addsd	xmm2,qword ptr (log2_b_p_0-log2_b_c)[rcx] # p0+p1+p2+p3+p4

	subsd	xmm5,xmm7				# x-0.5x2

	divsd	xmm2,xmm10				# p/q

	andpd	xmm3,xmm5				# (x-0.5x2)_h
	subsd	xmm1,xmm3				# x-(x-0.5x2)_h
	subsd	xmm1,xmm7				# (x-0.5x2)_l

	mulsd	xmm2,xmm8				# (p/q)*x3

	mulsd	xmm5,qword ptr d1ln2_26_l[rip] # (x-0.5x2) * (1/ln 2)_l
	mulsd	xmm1,qword ptr d1ln2_26[rip] # (x-0.5x2)_l * (1/ln 2)_h
	mulsd	xmm3,qword ptr d1ln2_26[rip] # (x-0.5x2)_h * (1/ln 2)_h

	addsd	xmm1,xmm5				# (x-0.5x2) * (1/ln 2)_l+(x-0.5x2)_l * (1/ln 2)_h


	movsd	xmm5,xmm1				# xl
	addsd	xmm1,xmm2				# xl+r
	movlpd	xmm6,qword ptr real_26_bits[rip]

	addsd	xmm1,xmm3				# xh+xl+r

	andpd	xmm1,xmm6				# (log2 x)_h
	andpd	xmm6,xmm0				# y_h

	subsd	xmm3,xmm1				# xh-(log2 x)_h
	jmp		pow_real_2

pow_real_a_7_d_6:
	ucomisd	xmm0,qword ptr real_4605_0[rip]
	jae		pow_real_overflow		# because 1.1666666666666667407^4605>2^1024

	ucomisd	xmm0,qword ptr real_m_4834_0[rip]
	jbe		pow_real_underflow		# because 1.1666666666666667407^-4834<2^-1075

	subsd	xmm1,xmm2

	mulsd	xmm1,qword ptr real_0_75[rip]
	lea		rcx,log2_b_c[rip]
	lea		rdx,log2_s_c[rip]

	movlpd	xmm2,qword ptr real_0_25[rip]

	ucomisd	xmm1,xmm2
	subsd	xmm1,xmm2

	cmovb	rcx,rdx

	movsd	xmm5,xmm1				# x
	mulsd	xmm1,xmm1				# x2

	movlpd	xmm2,qword ptr (log2_b_p_1-log2_b_c)[rcx]
	movlpd	xmm4,qword ptr (log2_b_q_1-log2_b_c)[rcx]
	mulsd	xmm2,xmm5				# p1
	mulsd	xmm4,xmm5				# q1
	movsd	xmm8,xmm5				# x
	movlpd	xmm3,qword ptr (log2_b_p_2-log2_b_c)[rcx]
	movlpd	xmm6,qword ptr (log2_b_q_2-log2_b_c)[rcx]
	mulsd	xmm8,xmm1				# x3
	movsd	xmm7,xmm1				# x2
	mulsd	xmm1,xmm1				# x4

	movlpd	xmm9,qword ptr (log2_b_p_3-log2_b_c)[rcx]
	movlpd	xmm10,qword ptr (log2_b_q_3-log2_b_c)[rcx]

	mulsd	xmm3,xmm7				# p2
	mulsd	xmm6,xmm7				# q2

	movlpd	xmm11,qword ptr (log2_b_p_4-log2_b_c)[rcx]

	mulsd	xmm9,xmm8				# p3
	mulsd	xmm10,xmm8				# q3
	
	mulsd	xmm11,xmm1				# p4
	
	addsd	xmm10,xmm1				# q3+x4
	addsd	xmm9,xmm11				# p3+p4

	mulsd	xmm7,qword ptr real_0_5[rip] # 0.5x2

	addsd	xmm10,xmm6				# q2+q3+x4
	addsd	xmm3,xmm9				# p2+p3+p4	
	addsd	xmm10,xmm4				# q1+q2+q3+x4
	addsd	xmm2,xmm3				# p1+p2+p3+p4

	movlpd	xmm3,qword ptr real_26_bits[rip]
	movsd	xmm1,xmm5				# x

	addsd	xmm10,qword ptr (log2_b_q_0-log2_b_c)[rcx] # q0+q1+q2+q3+x4
	addsd	xmm2,qword ptr (log2_b_p_0-log2_b_c)[rcx] # p0+p1+p2+p3+p4

	subsd	xmm5,xmm7				# x-0.5x2

	divsd	xmm2,xmm10				# p/q

	andpd	xmm3,xmm5				# (x-0.5x2)_h
	subsd	xmm1,xmm3				# x-(x-0.5x2)_h
	subsd	xmm1,xmm7				# (x-0.5x2)_l

	mulsd	xmm2,xmm8				# (p/q)*x3

	mulsd	xmm5,qword ptr d1ln2_26_l[rip] # (x-0.5x2) * (1/ln 2)_l
	mulsd	xmm1,qword ptr d1ln2_26[rip] # (x-0.5x2)_l * (1/ln 2)_h
	mulsd	xmm3,qword ptr d1ln2_26[rip] # (x-0.5x2)_h * (1/ln 2)_h


	movlpd	xmm6,qword ptr log2_4_d_3_53[rip]
	movsd	xmm7,xmm3				# xh
	addsd	xmm3,xmm6				# xh+(log2 4/3)_h

	addsd	xmm1,xmm5				# (x-0.5x2) * (1/ln 2)_l+(x-0.5x2)_l * (1/ln 2)_h

	subsd	xmm6,xmm3				# (log2 4/3)_h-(xh+(log2 4/3)_h)

	addsd	xmm6,xmm7				# ((log2 4/3)_h-(xh+(log2 4/3)_h))+xh
	addsd	xmm1,qword ptr log2_4_d_3_53_l[rip] # xl+(log2 4/3)_l

	addsd	xmm1,xmm6				# (x+log2 4/3)_l

	movsd	xmm5,xmm1				# xl
	addsd	xmm1,xmm2				# xl+r
	movlpd	xmm6,qword ptr real_26_bits[rip]

	addsd	xmm1,xmm3				# xh+xl+r

	andpd	xmm1,xmm6				# (log2 x)_h
	andpd	xmm6,xmm0				# y_h

	subsd	xmm3,xmm1				# xh-(log2 x)_h
	jmp		pow_real_2

pow_real_small:
	ucomisd	xmm1,qword ptr real_2_p_m_1022[rip]
	jb		pow_real_negative_zero_denormalized_or_nan

pow_real_small_:
	ucomisd	xmm0,qword ptr real_4000_0[rip]
	jae		pow_real_underflow		# because 0.83^4000<2^-1075

	ucomisd	xmm0,qword ptr real_m_3810_0[rip]
	ja		log2_real_
	jmp		pow_real_overflow		# because 0.83^-3810>2^1024

pow_real_large:
	ucomisd	xmm1,qword ptr real_max[rip]
	ja		pow_real_inf

	ucomisd	xmm0,qword ptr real_1401_0[rip]
	jae		pow_real_overflow		# because 1.66^1401>2^1024

	ucomisd	xmm0,qword ptr real_m_1471_0[rip]
	jbe		pow_real_underflow		# because 1.66^-1471<2^-1075

log2_real_:
	movlpd	xmm2,qword ptr mask_significand[rip]
	andpd	xmm2,xmm1
	psrlq	xmm1,52

log2_real__:
	movlpd	xmm3,qword ptr real_1_0[rip]
	movlpd	xmm4,qword ptr real_0_5[rip]
	orpd	xmm3,xmm2
	orpd	xmm4,xmm2

	ucomisd	xmm3,qword ptr real_1_66[rip]

	movlpd	xmm5,qword ptr real_1_0[rip]

	ja		log2_real_l1

	ucomisd	xmm3,qword ptr real_7_d_6[rip]
	ja		pow_real_g_7_d_6

log2_real_g1:
	subsd	xmm3,xmm5

	psubq	xmm1,xmmword ptr qw_1023[rip]

	movsd	xmm6,xmm3				# x
	mulsd	xmm3,xmm3				# x2

	movlpd	xmm2,qword ptr log2_b_p_1[rip]
	movlpd	xmm5,qword ptr log2_b_q_1[rip]
	mulsd	xmm2,xmm6				# p1
	mulsd	xmm5,xmm6				# q1
	movsd	xmm9,xmm6				# x

	cvtdq2pd xmm4,xmm1

	movlpd	xmm1,qword ptr log2_b_p_2[rip]
	movlpd	xmm7,qword ptr log2_b_q_2[rip]
	mulsd	xmm9,xmm3				# x3
	movsd	xmm8,xmm3				# x2
	mulsd	xmm3,xmm3				# x4

	movlpd	xmm10,qword ptr log2_b_p_3[rip]
	movlpd	xmm11,qword ptr log2_b_q_3[rip]

	mulsd	xmm1,xmm8				# p2
	mulsd	xmm7,xmm8				# q2

	movlpd	xmm12,qword ptr log2_b_p_4[rip]

	mulsd	xmm10,xmm9				# p3
	mulsd	xmm11,xmm9				# q3
	
	mulsd	xmm12,xmm3				# p4
	
	addsd	xmm11,xmm3				# q3+x4
	addsd	xmm10,xmm12				# p3+p4

	mulsd	xmm8,qword ptr real_0_5[rip] # 0.5x2

	addsd	xmm11,xmm7				# q2+q3+x4
	addsd	xmm1,xmm10				# p2+p3+p4	
	addsd	xmm11,xmm5				# q1+q2+q3+x4
	addsd	xmm2,xmm1				# p1+p2+p3+p4

	movlpd	xmm3,qword ptr real_26_bits[rip]
	movsd	xmm1,xmm6				# x

	addsd	xmm11,qword ptr log2_b_q_0[rip] # q0+q1+q2+q3+x4
	addsd	xmm2,qword ptr log2_b_p_0[rip] # p0+p1+p2+p3+p4

log2_real_gl:
	subsd	xmm6,xmm8				# x-0.5x2

	divsd	xmm2,xmm11				# p/q

	andpd	xmm3,xmm6				# (x-0.5x2)_h
	subsd	xmm1,xmm3				# x-(x-0.5x2)_h
	subsd	xmm1,xmm8				# (x-0.5x2)_l

	mulsd	xmm2,xmm9				# (p/q)*x3

	mulsd	xmm6,qword ptr d1ln2_26_l[rip] # (x-0.5x2) * (1/ln 2)_l
	mulsd	xmm1,qword ptr d1ln2_26[rip] # (x-0.5x2)_l * (1/ln 2)_h
	mulsd	xmm3,qword ptr d1ln2_26[rip] # (x-0.5x2)_h * (1/ln 2)_h

	addsd	xmm1,xmm6				# (x-0.5x2) * (1/ln 2)_l+(x-0.5x2)_l * (1/ln 2)_h

	movsd	xmm5,xmm1				# xl
	addsd	xmm1,xmm2				# xl+r
	movlpd	xmm6,qword ptr real_26_bits[rip]

	addsd	xmm1,xmm3				# xh+xl+r
	
	addsd	xmm1,xmm4				# e+xh+xl+r

	andpd	xmm1,xmm6				# (log2 x)_h
	andpd	xmm6,xmm0				# y_h
	
	subsd	xmm4,xmm1				# e-(log2 x)_h

	addsd	xmm3,xmm4				# e+xh-(log2 x)_h
	jmp		pow_real_2

log2_real_l1:
	subsd	xmm4,xmm5

	psubq	xmm1,xmmword ptr qw_1022[rip]

	movsd	xmm6,xmm4				# x
	mulsd	xmm4,xmm4				# x2

	movlpd	xmm2,qword ptr log2_s_p_1[rip]
	movlpd	xmm5,qword ptr log2_s_q_1[rip]
	mulsd	xmm2,xmm6				# p1
	mulsd	xmm5,xmm6				# q1
	movsd	xmm9,xmm6				# x

	movlpd	xmm3,qword ptr log2_s_p_2[rip]
	movlpd	xmm7,qword ptr log2_s_q_2[rip]
	mulsd	xmm9,xmm4				# x3
	movsd	xmm8,xmm4				# x2
	mulsd	xmm4,xmm4				# x4

	movlpd	xmm10,qword ptr log2_s_p_3[rip]
	movlpd	xmm11,qword ptr log2_s_q_3[rip]

	mulsd	xmm3,xmm8				# p2
	mulsd	xmm7,xmm8				# q2

	movlpd	xmm12,qword ptr log2_s_p_4[rip]

	mulsd	xmm10,xmm9				# p3
	mulsd	xmm11,xmm9				# q3
	
	mulsd	xmm12,xmm4				# p4

	addsd	xmm11,xmm4				# q3+x4
	addsd	xmm10,xmm12				# p3+p4

	mulsd	xmm8,qword ptr real_0_5[rip] # 0.5x2

	cvtdq2pd xmm4,xmm1

	addsd	xmm11,xmm7				# q2+q3+x4
	addsd	xmm3,xmm10				# p2+p3+p4	
	addsd	xmm11,xmm5				# q1+q2+q3+x4
	addsd	xmm2,xmm3				# p1+p2+p3+p4

	movlpd	xmm3,qword ptr real_26_bits[rip]
	movsd	xmm1,xmm6				# x

	addsd	xmm11,qword ptr log2_s_q_0[rip] # q0+q1+q2+q3+x4
	addsd	xmm2,qword ptr log2_s_p_0[rip] # p0+p1+p2+p3+p4

	jmp		log2_real_gl

pow_real_to_zero_or_nan:
	jp		pow_real_to_nan
	movlpd	xmm0,qword ptr real_1_0[rip]
	ret

pow_real_negative_zero_denormalized_or_nan:
	ucomisd	xmm1,qword ptr real_0_0[rip]
	jbe		pow_real_zero_negative_or_nan
	
	# denormalized > 0.0

pow_real_denormalized:
	ucomisd	xmm0,qword ptr real_1_052[rip]
	jae		pow_real_underflow		# because (2^-1022)^1.052<2^-1075

	ucomisd	xmm0,qword ptr real_m_1_052[rip]
	jbe		pow_real_overflow		# because (2^-1022)^-1.052>2^1075

	mulsd	xmm1,qword ptr real_2_p_55[rip]

	movlpd	xmm2,qword ptr mask_significand[rip]
	andpd	xmm2,xmm1

	movq	xmm5,qword ptr qw_55[rip]
	psrlq	xmm1,52

	psubq	xmm1,xmm5
	jmp		log2_real__

pow_real_zero_negative_or_nan:
	je		pow_real_zero_or_nan

	movlpd	xmm2,qword ptr mask_all_except_sign[rip]
	andpd	xmm2,xmm0				# |y|

	ucomisd	xmm2,qword ptr real_2_p_53[rip]
	jae		pow_real_negative_to_large_or_inf

	ucomisd	xmm2,qword ptr real_1_0[rip]
	jb		pow_real_negative_to_non_int

	movq	xmm3,qword ptr round_c[rip]
	psrlq	xmm2,52
	psubq	xmm3,xmm2

	movq	xmm4,qword ptr mask_all_one[rip]
	movq	xmm5,qword ptr mask_all_one_except_last[rip]
	psllq	xmm4,xmm3
	psllq	xmm5,xmm3
	andpd	xmm4,xmm0
	andpd	xmm5,xmm0				# 1 -> 2 and -1 -> -2

	ucomisd	xmm4,xmm0
	jne		pow_real_negative_to_non_int

	ucomisd	xmm5,xmm0
	je		pow_real_negative_to_even_int
	
pow_real_negative_to_odd_int:
	call	pow_real_negative_to_even_int
	movlpd	xmm1,qword ptr mask_sign[rip]
	xorpd	xmm0,xmm1
	ret

pow_real_negative_to_even_int:
	movlpd	xmm2,qword ptr mask_all_except_sign[rip]
	andpd	xmm1,xmm2				# |x|
	ucomisd	xmm1,qword ptr real_0_83[rip] # x>=0.83
	jae		pow_real_not_small

	ucomisd	xmm1,qword ptr real_2_p_m_1022[rip]
	jae		pow_real_small_
	jmp		pow_real_denormalized

pow_real_negative_to_large_or_inf:
	movlpd	xmm2,qword ptr mask_all_except_sign[rip]
	andpd	xmm1,xmm2				# |x|
	ucomisd	xmm1,qword ptr real_0_83[rip]
	jb		pow_real_small_to_large_or_inf	# because 0.83^(2^53) too large or small
	ucomisd	xmm1,qword ptr real_7_d_6[rip]

	movlpd	xmm2,qword ptr real_1_0[rip]

	ja		pow_real_large_to_large_or_inf	# because 1.16^(2^53) too large or small

	jmp		pow_real_between_0_83_and_7_d_6

pow_real_negative_to_non_int:
	ucomisd	xmm1,qword ptr real_m_max[rip]
	jb		pow_real_m_inf_to_non_int		# x==-inf
	movlpd	xmm0,qword ptr real_0_0[rip]
	divsd	xmm0,xmm0
	ret

pow_real_zero_or_nan:
	jp		pow_real_nan_to_non_zero
pow_real_zero:
	movlpd	xmm2,qword ptr real_1_0[rip]
	orpd	xmm2,xmm1						# 0.0 -> 1.0 and -0.0 -> -1.0
	ucomisd	xmm2,qword ptr real_0_0[rip]
	jb		pow_real_m_zero

pow_real_small_to_large_or_inf:
pow_real_m_zero_to_non_odd_int:
	ucomisd	xmm0,qword ptr real_0_0[rip]
	jb		pow_real_overflow

pow_real_inf_to_negative:
pow_real_underflow:
	movlpd	xmm0,qword ptr real_0_0[rip]
	ret

pow_real_m_inf_to_non_int:
pow_real_large_to_large_or_inf:
	ucomisd	xmm0,qword ptr real_0_0[rip]
	jb		pow_real_underflow

pow_real_overflow:
	movlpd	xmm0,qword ptr real_1_0[rip]
	divsd	xmm0,qword ptr real_0_0[rip]	# inf
	ret

pow_real_m_zero:
	movlpd	xmm2,qword ptr mask_all_except_sign[rip]
	andpd	xmm2,xmm0				# |y|

	ucomisd	xmm2,qword ptr real_2_p_53[rip]
	jae		pow_real_m_zero_to_non_odd_int

	ucomisd	xmm2,qword ptr real_m_1_0[rip]
	jb		pow_real_m_zero_to_non_odd_int

	movq	xmm4,qword ptr round_c[rip]
	psrlq	xmm2,52
	psubq	xmm4,xmm2

	movq	xmm5,qword ptr mask_all_one_except_last[rip]
	psllq	xmm5,xmm4
	andpd	xmm5,xmm0				# 1 -> 2 and -1 -> -2

	ucomisd	xmm5,xmm0
	je		pow_real_m_zero_to_non_odd_int

	ucomisd	xmm0,xmm3
	jb		pow_real_m_overflow

	movsd	xmm0,xmm1				# -0.0
	ret

pow_real_m_overflow:
	movlpd	xmm0,qword ptr real_m_1_0[rip]
	divsd	xmm0,qword ptr real_0_0[rip]	# -inf
	ret

pow_real_nan_to_non_zero:
pow_real_to_nan:
	addsd	xmm0,xmm1
	ret

pow_real_inf:
	ucomisd	xmm0,qword ptr real_0_0[rip]
	jb		pow_real_inf_to_negative
	movsd	xmm0,xmm1
	ret

pow_real_exp_too_large:
	ucomisd	xmm1,xmm2
	je		power_one_to_large_or_inf
	ja		pow_real_overflow
	jmp		pow_real_underflow

pow_real_exp_too_large_m:
	ucomisd	xmm1,xmm2
	je		power_one_to_large_or_inf_m
	jb		pow_real_overflow
	jmp		pow_real_underflow

power_one_to_large_or_inf:
	ucomisd	xmm0,qword ptr real_max[rip]
	ja		power_one_to_inf
	movsd	xmm0,xmm1
	ret

power_one_to_large_or_inf_m:
	ucomisd	xmm0,qword ptr real_m_max[rip]
	jb		power_one_to_inf_m
	movsd	xmm0,xmm1
	ret

power_one_to_inf_m:
power_one_to_inf:
	subsd	xmm0,xmm0
	ret


pow_real_g_7_d_6:
	subsd	xmm3,xmm5

	mulsd	xmm3,qword ptr real_0_75[rip]
	lea		rcx,log2_b_c[rip]
	lea		rdx,log2_s_c[rip]

	movlpd	xmm4,qword ptr real_0_25[rip]

	ucomisd	xmm3,xmm4
	subsd	xmm3,xmm4

	cmovb	rcx,rdx
	psubq	xmm1,xmmword ptr qw_1023[rip]

	movsd	xmm6,xmm3				# x
	mulsd	xmm3,xmm3				# x2

	movlpd	xmm2,qword ptr (log2_b_p_1-log2_b_c)[rcx]
	movlpd	xmm5,qword ptr (log2_b_q_1-log2_b_c)[rcx]
	mulsd	xmm2,xmm6				# p1
	mulsd	xmm5,xmm6				# q1
	movsd	xmm9,xmm6				# x

	cvtdq2pd xmm4,xmm1

	movlpd	xmm1,qword ptr (log2_b_p_2-log2_b_c)[rcx]
	movlpd	xmm7,qword ptr (log2_b_q_2-log2_b_c)[rcx]
	mulsd	xmm9,xmm3				# x3
	movsd	xmm8,xmm3				# x2
	mulsd	xmm3,xmm3				# x4

	movlpd	xmm10,qword ptr (log2_b_p_3-log2_b_c)[rcx]
	movlpd	xmm11,qword ptr (log2_b_q_3-log2_b_c)[rcx]

	mulsd	xmm1,xmm8				# p2
	mulsd	xmm7,xmm8				# q2

	movlpd	xmm12,qword ptr (log2_b_p_4-log2_b_c)[rcx]

	mulsd	xmm10,xmm9				# p3
	mulsd	xmm11,xmm9				# q3
	
	mulsd	xmm12,xmm3				# p4
	
	addsd	xmm11,xmm3				# q3+x4
	addsd	xmm10,xmm12				# p3+p4

	mulsd	xmm8,qword ptr real_0_5[rip] # 0.5x2

	addsd	xmm11,xmm7				# q2+q3+x4
	addsd	xmm1,xmm10				# p2+p3+p4	
	addsd	xmm11,xmm5				# q1+q2+q3+x4
	addsd	xmm2,xmm1				# p1+p2+p3+p4

	movlpd	xmm3,qword ptr real_26_bits[rip]
	movsd	xmm1,xmm6				# x

	addsd	xmm11,qword ptr (log2_b_q_0-log2_b_c)[rcx] # q0+q1+q2+q3+x4
	addsd	xmm2,qword ptr (log2_b_p_0-log2_b_c)[rcx] # p0+p1+p2+p3+p4

	subsd	xmm6,xmm8				# x-0.5x2

	addsd	xmm4,qword ptr log2_4_d_3_42[rip] # e+(log2 4/3)_h

	divsd	xmm2,xmm11				# p/q

	andpd	xmm3,xmm6				# (x-0.5x2)_h
	subsd	xmm1,xmm3				# x-(x-0.5x2)_h
	subsd	xmm1,xmm8				# (x-0.5x2)_l

	mulsd	xmm2,xmm9				# (p/q)*x3

	mulsd	xmm6,qword ptr d1ln2_26_l[rip] # (x-0.5x2) * (1/ln 2)_l
	mulsd	xmm1,qword ptr d1ln2_26[rip] # (x-0.5x2)_l * (1/ln 2)_h
	mulsd	xmm3,qword ptr d1ln2_26[rip] # (x-0.5x2)_h * (1/ln 2)_h

	movsd	xmm7,xmm3				# xh
	addsd	xmm3,xmm4				# xh+e+(log2 4/3)_h

	addsd	xmm1,xmm6				# (x-0.5x2) * (1/ln 2)_l+(x-0.5x2)_l * (1/ln 2)_h

	subsd	xmm4,xmm3				# e+(log2 4/3)_h-(xh+e+(log2 4/3)_h)

	addsd	xmm4,xmm7				# (e+(log2 4/3)_h-(xh+e+(log2 4/3)_h))+xh
	addsd	xmm1,qword ptr log2_4_d_3_42_l[rip] # xl+(log2 4/3)_l

	addsd	xmm1,xmm4				# (x+log2 4/3)_l

	movsd	xmm5,xmm1				# xl
	addsd	xmm1,xmm2				# xl+r
	movlpd	xmm6,qword ptr real_26_bits[rip]

	addsd	xmm1,xmm3				# e+xh+xl+r
	
	andpd	xmm1,xmm6				# (log2 x)_h
	andpd	xmm6,xmm0				# y_h
	
	subsd	xmm4,xmm1				# e-(log2 x)_h

	addsd	xmm3,xmm4				# e+xh-(log2 x)_h
#	jmp		pow_real_2


pow_real_2:
# xmm0 = y
# xmm1 = (log2 x)_h
# xmm2 = r
# xmm3 = (e+)xh-(log2 x)_h
# xmm5 = xl
# xmm6 = y_h
	movsd	xmm7,xmm0				# y
	subsd	xmm0,xmm6				# y_l
	mulsd	xmm6,xmm1				# p_h = y_h*(log2 x)_h

	addsd	xmm3,xmm2				# xh+r-(log2 x)_h
	mulsd	xmm0,xmm1				# y_l*(log2 x)_h

	addsd	xmm3,xmm5				# (log2 x)_l

	mulsd	xmm3,xmm7				# y*(log2 x)_l

	addsd	xmm0,xmm3				# p_l

	movsd	xmm7,xmm0				# p_l
	addsd	xmm0,xmm6				# p

exp2:
	ucomisd	xmm0,qword ptr real_m_0_5[rip]
	jb		exp2_l_n
	ucomisd	xmm0,qword ptr real_0_5[rip]
	ja		exp2_l
exp2_l_:
	ucomisd	xmm0,qword ptr real_m_0_25[rip]
	jbe		exp2_l_m_0_25
	ucomisd	xmm0,qword ptr real_0_25[rip]
	jae		exp2_g_0_25

	ucomisd	xmm0,qword ptr real_0_0[rip]

	lea		rcx,exp2_p0_c[rip]
	lea		rdx,exp2_m0_c[rip]

	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2

	cmovb	rcx,rdx
exp2_:
	movlpd	xmm13,qword ptr (exp2_p0_2-exp2_p0_c)[rcx]
	movlpd	xmm14,qword ptr (exp2_p0_4-exp2_p0_c)[rcx]

	movsd	xmm2,xmm0				# x2
	mulsd	xmm0,xmm0				# x4

	mulsd	xmm13,xmm2				# p2

	movsd	xmm3,xmm1				# x
	mulsd	xmm1,xmm2				# x3

	movlpd	xmm15,qword ptr (exp2_p0_3-exp2_p0_c)[rcx]
	mulsd	xmm14,xmm0				# p4
	
	mulsd	xmm15,xmm1				# p3

	movsd	xmm4,xmm0				# x4
	mulsd	xmm0,xmm0				# x8

	movsd	xmm5,xmm2				# x2
	mulsd	xmm2,xmm1				# x5	

	mulsd	xmm5,xmm4				# x6
	mulsd	xmm1,xmm4				# x7
	mulsd	xmm4,xmm2				# x9

	mulsd	xmm0,qword ptr (exp2_p0_8-exp2_p0_c)[rcx] # p8
	mulsd	xmm2,qword ptr (exp2_p0_5-exp2_p0_c)[rcx] # p5
	mulsd	xmm5,qword ptr (exp2_p0_6-exp2_p0_c)[rcx] # p6
	mulsd	xmm1,qword ptr (exp2_p0_7-exp2_p0_c)[rcx] # p7
	mulsd	xmm4,qword ptr (exp2_p0_9-exp2_p0_c)[rcx] # p9

	addsd	xmm0,xmm4				# p9+p8

	movlpd	xmm9,qword ptr real_26_bits[rip]
	andpd	xmm9,xmm6				# xh_h
	mulsd	xmm3,qword ptr (exp2_p0_1l-exp2_p0_c)[rcx] # x*c1l

	addsd	xmm0,xmm1				# p9+p8+p7

	subsd	xmm6,xmm9				# xh_l
	mulsd	xmm9,qword ptr (exp2_p0_1h-exp2_p0_c)[rcx] # p1h=xh_h*c1h

	addsd	xmm0,xmm5				# p9+p8+p7+p6

	movlpd	xmm1,qword ptr (exp2_p0_0h-exp2_p0_c)[rcx]
	addsd	xmm6,xmm7				# xh_l+x_l
	movsd	xmm4,xmm9				# p1h
	addsd	xmm9,xmm1				# p1h+c0h

	addsd	xmm0,xmm2				# p9+p8+p7+p6+p5

	mulsd	xmm6,qword ptr (exp2_p0_1h-exp2_p0_c)[rcx] # (xh_l+x_l)*c1h
	subsd	xmm1,xmm9				# c0h-(p1h+c0h)

	addsd	xmm0,xmm14				# p9+p8+p7+p6+p5+p4

	addsd	xmm3,xmm6				# (xh_l+x_l)*c1h+x*c1l
	addsd	xmm1,xmm4				# (c0h-(p1h+c0h))+p1h

	addsd	xmm0,xmm15				# p9+p8+p7+p6+p5+p4+p3

	addsd	xmm1,xmm3

	addsd	xmm0,xmm13				# p9+p8+p7+p6+p5+p4+p3+p2

	addsd	xmm0,qword ptr (exp2_p0_0l-exp2_p0_c)[rcx]
	
	addsd	xmm0,xmm1
	addsd	xmm0,xmm9
	ret

exp2_l_m_0_25:
	movlpd	xmm1,qword ptr real_0_25[rip]
	addsd	xmm0,xmm1
	addsd	xmm6,xmm1

	lea		rcx,exp2_m0_25_c[rip]

	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2
	jmp		exp2_

exp2_g_0_25:
	movlpd	xmm1,qword ptr real_0_25[rip]
	subsd	xmm0,xmm1
	subsd	xmm6,xmm1

	lea		rcx,exp2_p0_25_c[rip]

	movsd	xmm1,xmm0				# x
	mulsd	xmm0,xmm0				# x2
	jmp		exp2_

exp2_l_n:
	movlpd	xmm1,qword ptr real_m_0_5[rip]
	movq	xmm4,qword ptr m_round_c[rip]
	jmp		exp2_l_pn

exp2_l:
	movlpd	xmm1,qword ptr real_0_5[rip]
	movq	xmm4,qword ptr round_c[rip]

exp2_l_pn:
	addsd	xmm1,xmm0

	movq	xmm2,xmm1
	psrlq	xmm1,52
	psubq	xmm4,xmm1
	movq	xmm1,qword ptr mask_all_one[rip]
	psllq	xmm1,xmm4
	andpd	xmm1,xmm2

	subsd	xmm6,xmm1
	movsd	xmm0,xmm7

	cvtpd2dq xmm8,xmm1

	ucomisd	xmm1,qword ptr qword ptr real_1023[rip]
	ja		exp2_overflow0
	ucomisd	xmm1,qword ptr qword ptr real_m_1022[rip]
	jb		exp2_underflow0

	movq	xmm9,qword ptr qw_1023[rip]

	addsd	xmm0,xmm6

	paddq	xmm8,xmm9

	psllq	xmm8,52

	call	exp2_l_

	mulsd	xmm0,xmm8
	ret

exp2_overflow0:
	ucomisd	xmm1,qword ptr qword ptr real_1025[rip]
	ja		exp2_overflow

	movq	xmm9,qword ptr qw_1021[rip]

	addsd	xmm0,xmm6

	paddq	xmm8,xmm9

	psllq	xmm8,52

	call	exp2_l_

	mulsd	xmm0,xmm8
	mulsd	xmm0,qword ptr real_4_0[rip]
	ret

exp2_overflow:
	movlpd	xmm0,qword ptr qword ptr real_2_p_1023[rip]
	mulsd	xmm0,xmm0
	ret

exp2_underflow0:
	ucomisd	xmm1,qword ptr qword ptr real_m_1076[rip]
	jbe		exp2_underflow

	movq	xmm9,qword ptr qw_1078[rip]

	addsd	xmm0,xmm6

	paddq	xmm8,xmm9

	psllq	xmm8,52

	call	exp2_l_

	mulsd	xmm0,xmm8
	mulsd	xmm0,qword ptr real_2_p_m_55[rip]
	ret

exp2_underflow:
	movlpd	xmm0,qword ptr qword ptr real_0_0[rip]
	ret

	.data

real_13_bits:
	.quad	0xffffff0000000000
real_14_bits:
	.quad	0xffffff8000000000
real_17_bits:
	.quad	0xfffffff000000000
real_18_bits:
	.quad	0xfffffff800000000
real_21_bits:
	.quad	0xffffffff00000000
real_25_bits:
	.quad	0xfffffffff0000000
real_26_bits:
	.quad	0xfffffffff8000000
real_27_bits:
	.quad	0xfffffffffc000000
real_34_bits:
	.quad	0xfffffffffff80000
real_39_bits:
	.quad	0xffffffffffffc000
real_40_bits:
	.quad	0xffffffffffffe000
real_47_bits:
	.quad	0xffffffffffffffc0
real_48_bits:
	.quad	0xffffffffffffffe0
real_49_bits:
	.quad	0xfffffffffffffff0
real_50_bits:
	.quad	0xfffffffffffffff8
real_51_bits:
	.quad	0xfffffffffffffffc

real_abs_40_bits:
	.quad	0x7fffffffffffe000
real_abs_39_bits:
	.quad	0x7fffffffffffc000

real_0_0:
	.double	0r0.0
real_0_25:
	.double	0r0.25
real_m_0_25:
	.double	0r-0.25
real_0_5:
	.double	0r0.5
real_m_0_5:
	.double	0r-0.5
real_1_0:
	.double	0r1.0
real_m_1_0:
	.double	0r-1.0
real_1_25:
	.double	0r1.25
real_m_1_25:
	.double	0r-1.25
real_1_5:
	.double	0r1.5
real_m_1_5:
	.double	0r-1.5
real_2_0:
	.double	0r2.0
real_m_2_0:
	.double	0r-2.0
real_3_0:
	.double	0r3.0
real_m_3_0:
	.double	0r-3.0
real_4_0:
	.double	0r4.0
real_m_4_0:
	.double	0r-4.0
real_5_0:
	.double	0r5.0
real_m_5_0:
	.double	0r-5.0

real_2_p_m_11:
	.double	0r4.8828125E-4
real_2_p_m_12:
	.double	0r2.44140625E-4
real_m_2_p_m_12:
	.double	0r-2.44140625E-4
real_2_p_m_13:
	.double	0r1.220703125E-4
real_2_p_m_16:
	.double	0r1.52587890625E-5
real_m_2_p_m_16:
	.double	0r-1.52587890625E-5
real_2_p_m_18:
	.double	0r3.814697265625E-6
real_2_p_m_31:
	.double	0r4.656612873077392578125E-10

real_0_4:
	.double	0r0.4
real_m_0_4:
	.double	0r-0.4
real_0_125:
	.double	0r0.125

real_0_675:
	.double	0r0.675
real_m_0_675:
	.double	0r-0.675
real_0_9920:
	.double	0r0.9920
real_0_54000000017867999524:
	.double	0r0.54000000017867999524
real_m_0_54000000017867999524:
	.double	0r-0.54000000017867999524
real_0_03125:
	.double	0r0.03125
real_pi_d_2_m_0_03125:
	.double	0r1.5395463267948965579

real_0_58:
	.double	0r0.58
real_m_0_58:
	.double	0r-0.58
real_0_54:
	.double	0r0.54
real_0_76:
	.double	0r0.76
real_0_65000000004061742054:
	.double	0r0.65000000004061742054

real_0_26:
	.double	0r0.26
real_m_0_26:
	.double	0r-0.26
real_0_70:
	.double	0r0.70
real_m_0_70:
	.double	0r-0.70
real_1_4:
	.double	0r1.4
real_m_1_4:
	.double	0r-1.4

real_0_7025:
	.double	0r0.7025
real_1_405:
	.double	0r1.405
real_0_8243:
	.double	0r0.82436063535006407342
real_1_6487:
	.double	0r1.6487212707001281468
real_0_833:
	.double	0r0.833
real_1_666:
	.double	0r1.666
real_7_d_6:
	.double	0r1.1666666666666667407
real_0_75:
	.double	0r0.75

ln_4_d_3_53:
	.double	0r2.8768207245178090137E-1
ln_4_d_3_53_l:
	.double	0r2.6071606164425639761E-17
ln_4_d_3_42:
	.double	0r2.8768207245173016417E-1
ln_4_d_3_42_l:
	.double	0r5.0763263831534079404E-14

log10_4_d_3_53:
	.double	0r1.2493873660829994676E-1
log10_4_d_3_53_l:
	.double	0r6.3704258509422005489E-18
log10_4_d_3_42:
	.double	0r1.2493873660829990513E-1
log10_4_d_3_42_l:
	.double	0r4.8003789274385573126E-17

log2_4_d_3_53:
	.double	0r4.1503749927884381332E-1
log2_4_d_3_53_l:
	.double	0r5.2244900613901090572E-18
log2_4_d_3_42:
	.double	0r4.1503749927881017356E-1
log2_4_d_3_42_l:
	.double	0r3.3644982136203633607E-14

mask_significand:
	.quad	0x0000fffffffffffff

real_1_66:
	.double	0r1.66
real_0_83:
	.double	0r0.83

real_pi:
	.double	0r3.1415926535897931160
real_m_pi:
	.double	0r-3.1415926535897931160
real_pi_l:
	.double	0r1.2246467991473532072E-16
real_m_pi_l:
	.double	0r-1.2246467991473532072E-16

real_pi_d_2:
	.double	0r1.5707963267948965579
real_pi_d_2_l:
	.double	0r6.1232339957367660359E-17

real_m_pi_d_2:
	.double	0r-1.5707963267948965579
real_m_pi_d_2_l:
	.double	0r-6.1232339957367660359E-17

real_pi_m_1_d_2:
	.double	0r1.07079632679489655800
real_pi_d_4:
	.double	0r7.8539816339744827900E-1
real_m_pi_d_4:
	.double	0r-7.8539816339744827900E-1
real_pi_d_4_l:
	.double	0r3.0616169978683830179E-17
real_m_pi_d_4_l:
	.double	0r-3.0616169978683830179E-17
real_pi_p_0_375_d_4:
	.double	0r8.7914816339744830962E-1
real_pi_p_0_875_d_4:
	.double	0r1.0041481633974482790
real_pi_p_1_5_d_4:
	.double	0r1.1603981633974483096
real_3_pi_d_4:
	.double	0r2.3561944901923449288
real_m_3_pi_d_4:
	.double	0r-2.3561944901923449288
real_5_pi_d_4:
	.double	0r3.9269908169872413950
real_m_5_pi_d_4:
	.double	0r-3.9269908169872413950
real_7_pi_d_4:
	.double	0r5.4977871437821379530
real_m_7_pi_d_4:
	.double	0r-5.4977871437821379530
real_9_pi_d_4:
	.double	0r7.0685834705770345110
real_m_9_pi_d_4:
	.double	0r-7.0685834705770345110
real_3_pi_d_2:
	.double	0r4.7123889803846896740
real_m_3_pi_d_2:
	.double	0r-4.7123889803846896740
real_3_pi_d_2_l:
	.double	0r1.8369701987210296875E-16
real_m_3_pi_d_2_l:
	.double	0r-1.8369701987210296875E-16
real_2_pi:
	.double	0r6.2831853071795862320
real_2_pi_l:
	.double	0r2.4492935982947064143E-16
real_m_2_pi_l:
	.double	0r-2.4492935982947064143E-16

real_4_d_pi:
	.double	0r1.2732395447351627649
real_pi_d_4_26:
	.double	0r7.8539815545082092285E-1
real_pi_d_4_26_26:
	.double	0r7.9466273561479283671E-9
real_pi_d_4_52_l:
	.double	0r3.0616169978683830179E-17

real_36825084_pi:
	.double	0r115689413.36222703755
real_m_36825084_pi:
	.double	0r-115689413.36222703755
real_36825084_pi_27:
	.double	0r115689413.0
real_36825084_pi_27_27:
	.double	0r3.6222703754901885986E-1
real_36825084_pi_54_l:
	.double	0r1.3588030639188803060E-17

real_pi_d_2_m_1_0_52:
	.double	0r5.7079632679489655800E-1
real_1_0_m_pi_d_2_52:
	.double	0r-5.7079632679489655800E-1
real_pi_d_2_m_1_0_52_l:
	.double	0r6.1232339957367660359E-17
real_m_pi_d_2_m_1_0_52_l:
	.double	0r-6.1232339957367660359E-17
real_pi_d_2_p_1_0:
	.double	0r2.57079632679489655800
real_pi_d_2_p_1_0_l:
	.double	0r6.1232339957367660359E-17
real_m_pi_d_2_p_1_0_l:
	.double	0r-6.1232339957367660359E-17

real_0_338:
	.double	0r0.338
real_m_0_338:
	.double	0r-0.338
real_0_542:
	.double	0r0.542
real_m_0_542:
	.double	0r-0.542
real_0_699:
	.double	0r0.699
real_m_0_699:
	.double	0r-0.699
real_0_89:
	.double	0r0.89
real_m_0_89:
	.double	0r-0.89
real_1_04:
	.double	0r1.04
real_m_1_04:
	.double	0r-1.04
real_1_18:
	.double	0r1.18
real_m_1_18:
	.double	0r-1.18

real_0_5_pi_m_1_18:
	.double	0r3.9079632679489667568E-1
real_1_18_m_0_5_pi:
	.double	0r-3.9079632679489667568E-1
real_0_5_pi_m_1_04:
	.double	0r5.3079632679489663349E-1
real_1_04_m_0_5_pi:
	.double	0r-5.3079632679489663349E-1
real_0_5_pi_m_0_89:
	.double	0r6.8079632679489665570E-1
real_0_89_m_0_5_pi:
	.double	0r-6.8079632679489665570E-1

real_pi_m_1_18:
	.double	0r1.9615926535897934002
real_n_pi_m_1_18:
	.double	0r-1.9615926535897934002
real_pi_m_1_04:
	.double	0r2.1015926535897930805
real_n_pi_m_1_04:
	.double	0r-2.1015926535897930805
real_pi_m_0_89:
	.double	0r2.2515926535897934357
real_n_pi_m_0_89:
	.double	0r-2.2515926535897934357
real_pi_m_0_699:
	.double	0r2.4425926535897932723
real_n_pi_m_0_699:
	.double	0r-2.4425926535897932723
real_pi_m_0_542:
	.double	0r2.5995926535897933007
real_n_pi_m_0_542:
	.double	0r-2.5995926535897933007
real_pi_m_0_338:
	.double	0r2.8035926535897930378
real_n_pi_m_0_338:
	.double	0r-2.8035926535897930378

real_pi_p_0_338:
	.double	0r3.4795926535897931942
real_n_pi_p_0_338:
	.double	0r-3.4795926535897931942
real_pi_p_0_542:
	.double	0r3.6835926535897933753
real_n_pi_p_0_542:
	.double	0r-3.6835926535897933753
real_pi_p_0_699:
	.double	0r3.8405926535897934038
real_n_pi_p_0_699:
	.double	0r-3.8405926535897934038
real_pi_p_0_89:
	.double	0r4.0315926535897936844
real_n_pi_p_0_89:
	.double	0r-4.0315926535897936844
real_pi_p_1_04:
	.double	0r4.1815926535897931515
real_n_pi_p_1_04:
	.double	0r-4.1815926535897931515
real_pi_p_1_18:
	.double	0r4.3215926535897928318
real_n_pi_p_1_18:
	.double	0r-4.3215926535897928318

real_2pi_m_1_18:
	.double	0r5.1031853071795865162
real_n_2pi_m_1_18:
	.double	0r-5.1031853071795865162
real_2pi_m_1_04:
	.double	0r5.2431853071795861965
real_n_2pi_m_1_04:
	.double	0r-5.2431853071795861965
real_2pi_m_0_89:
	.double	0r5.3931853071795865517
real_n_2pi_m_0_89:
	.double	0r-5.3931853071795865517
real_2pi_m_0_699:
	.double	0r5.5841853071795863883
real_n_2pi_m_0_699:
	.double	0r-5.5841853071795863883
real_2pi_m_0_542:
	.double	0r5.7411853071795864167
real_n_2pi_m_0_542:
	.double	0r-5.7411853071795864167
real_2pi_m_0_338:
	.double	0r5.9451853071795861538
real_n_2pi_m_0_338:
	.double	0r-5.9451853071795861538

real_2pi_p_0_338:
	.double	0r6.6211853071795863102
real_n_2pi_p_0_338:
	.double	0r-6.6211853071795863102
real_2pi_p_0_542:
	.double	0r6.8251853071795869354
real_n_2pi_p_0_542:
	.double	0r-6.8251853071795869354
real_2pi_p_0_699:
	.double	0r6.9821853071795860757
real_n_2pi_p_0_699:
	.double	0r-6.9821853071795860757
real_2pi_p_0_89:
	.double	0r7.1731853071795868004
real_n_2pi_p_0_89:
	.double	0r-7.1731853071795868004

atan_0_5_53:
	.double	0r4.6364760900080609352E-1
m_atan_0_5_53:
	.double	0r-4.6364760900080609352E-1
atan_0_5_53_l:
	.double	0r2.2698777452961687092E-17

atan_sqrt_0_5:
	.double	0r6.1547970867038737097E-1
m_atan_sqrt_0_5:
	.double	0r-6.1547970867038737097E-1
atan_sqrt_0_5_l:
	.double	0r-2.9904856561351187768E-17

real_h_pi_m_atan_s_2_53:
	.double	0r6.1547970867038737097E-1
real_h_pi_m_atan_s_2_53_l:
	.double	0r-2.9904856561351187768E-17

real_sqrt_2_p_1_5_pi_m_3_atan_sqrt_2_53:
	.double	0r3.2606526883842570363
real_sqrt_2_p_1_5_pi_m_3_atan_sqrt_2_53_l:
	.double	0r3.5657102106448616432E-17
real_3_atan_sqrt_2_m_sqrt_2_m_1_5_pi_m_53_l:
	.double	0r-3.5657102106448616432E-17

atan_sqrt_2:
	.double	0r9.5531661812450929805E-1
m_atan_sqrt_2:
	.double	0r-9.5531661812450929805E-1
atan_sqrt_2_l:
	.double	0r-1.9885105943796805915E-17

real_h_pi_m_atan_2_52:
	.double	0r4.6364760900080603800E-1
real_h_pi_m_atan_2_52_l:
	.double	0r7.8209928684219507951E-17
real_2_p_2_5_pi_m_5_atan_2_53:
	.double	0r4.3182380450040307451
real_2_p_2_5_pi_m_5_atan_2_53_l:
	.double	0r-1.6406186889148070581E-16
real_5_atan_2_m_2_m_2_5_pi_53_l:
	.double	0r1.6406186889148070581E-16

atan_2_53:
	.double	0r1.1071487177940904090
m_atan_2_53:
	.double	0r-1.1071487177940904090
atan_2_53_l:
	.double	0r9.4044713735663794124E-17
real_n_2_m_5_atan_2_53:
	.double	0r-3.5357435889704524890
real_n_2_m_5_atan_2_53_l:
	.double	0r-2.6134358828256379104E-17

real_5_atan_2_m_2_53:
	.double	0r3.5357435889704524890
real_5_atan_2_m_2_53_l:
	.double	0r2.6134358828256379104E-17

real_ln_2_t_0_5:
	.double	0r3.4657359027997265471E-1
real_n_ln_2_t_0_5:
	.double	0r-3.4657359027997265471E-1
real_ln_2_t_1_5:
	.double	0r1.0397207708399179641
real_ln2_42:
	.double	0r0.69314718055989033019
real_ln2_42_l:
	.double	0r5.4979230187083711552E-14
real_1_d_ln2:
	.double	0r1.4426950408889634074

real_log2_10_42:
	.double	0r0.30102999566395283182
real_log2_10_42_l:
	.double	0r2.8363394551044964154E-14

#d1ln10:
#	.double	0r4.3429448190325181667E-1
d1ln10_26:
	.double	0r4.3429447710514068603E-1
d1ln10_26_l:
	.double	0r4.7981111416159728067E-9

#d1ln2:
#	.double	0r1.4426950408889633870
d1ln2_26:
	.double	0r1.4426950216293334961
d1ln2_26_l:
	.double	0r1.9259629911266174689E-8

	.align	16
round_c:
	.quad		0x3ff+52
	.quad		0x3ff+52
m_round_c:
	.quad		0x0bff+52
	.quad		0x0bff+52
round_even_c:
	.quad		0x3ff+53
	.quad		0x3ff+53
m_round_even_c:
	.quad		0x0bff+53
	.quad		0x0bff+53
mask_all_one:
	.quad		-1
	.quad		-1
mask_all_one_except_last:
	.quad		-2
	.quad		-2
mask_all_one_except_second_last:
	.quad		-3
	.quad		-3
qw_1023:
	.quad		0x3ff
	.quad		0x3ff
qw_1022:
	.quad		0x3fe
	.quad		0x3fe
qw_1021:
	.quad		0x3fd
	.quad		0x3fd
qw_1077:
	.quad		0x3ff+54
	.quad		0x3ff+54
qw_1078:
	.quad		0x3ff+55
	.quad		0x3ff+55
qw_55:
	.quad		55
	.quad		55
mask_sign:
	.quad		0x08000000000000000
	.quad		0x08000000000000000
mask_all_except_sign:
	.quad		0x07fffffffffffffff
	.quad		0x07fffffffffffffff

real_0_43540000008249979402:
	.double	0r0.43540000008249979402
real_m_0_43540000008249979402:
	.double	0r-0.43540000008249979402
real_0_600000000082499762577:
	.double	0r0.600000000082499762577
real_m_0_600000000082499762577:
	.double	0r-0.600000000082499762577

#sin_p_0:
#	.double	0r-1.6666666666666629659E-1
#sin_p_1:
#	.double	0r8.3333333333220592498E-3
#sin_p_2:
#	.double	0r-1.9841269829591994520E-4
#sin_p_3:
#	.double	0r2.7557313627980839565E-6
#sin_p_4:
#	.double	0r-2.5050749232606622552E-8
#sin_p_5:
#	.double	0r1.5896334589820396677E-10

sin_p_0:
	.double	0r-1.6666666666666635210E-1
sin_p_1:
	.double	0r8.3333333333230012047E-3
sin_p_2:
	.double	0r-1.9841269830204560616E-4
sin_p_3:
	.double	0r2.7557313816586650493E-6
sin_p_4:
	.double	0r-2.5050776321203382309E-8
sin_p_5:
	.double	0r1.5897788850050641142E-10

sin_p1_c:
sin_p1_0h:
	.double	0r5.6464247346312534948E-1
sin_p1_0l:
	.double	0r-6.06241788103829245082E-24
sin_p1_1h:
	.double	0r8.2533560693264007568E-1
sin_p1_1l:
	.double	0r7.9304552924597260244E-9
sin_p1_2:
	.double	0r-2.8232123673155168353E-1
sin_p1_3:
	.double	0r-1.3755593581121927649E-1
sin_p1_4:
	.double	0r2.3526769749636338575E-2
sin_p1_5:
	.double	0r6.8777964033410682668E-3
sin_p1_6:
	.double	0r-7.8422158064252829243E-4
sin_p1_7:
	.double	0r-1.6378316139497952112E-4
sin_p1_8:
	.double	0r1.4102652890564176127E-5
sin_p1_9:
	.double	0r2.0754701007995074451E-6

sin_p2_c:
sin_p2_0h:
	.double	0r5.6464247346312534948E-1
sin_p2_0l:
	.double	0r-6.06241788103829245082E-24
sin_p2_1h:
	.double	0r8.2533560693264007568E-1
sin_p2_1l:
	.double	0r7.9304554034820284869E-9
sin_p2_2:
	.double	0r-2.8232123673155273824E-1
sin_p2_3:
	.double	0r-1.3755593580986152924E-1
sin_p2_4:
	.double	0r2.3526769748731638648E-2
sin_p2_5:
	.double	0r6.8777971733520841535E-3
sin_p2_6:
	.double	0r-7.8422151328288352071E-4
sin_p2_7:
	.double	0r-1.6373002515216467253E-4
sin_p2_8:
	.double	0r1.4106512050855138886E-5
sin_p2_9:
	.double	0r2.4764422854631738044E-6

sin_p3_c:
sin_p3_0h:
	.double	0r-5.6464247346312534948E-1
sin_p3_0l:
	.double	0r6.06241788103829245082E-24
sin_p3_1h:
	.double	0r8.2533560693264007568E-1
sin_p3_1l:
	.double	0r7.9304552924597260244E-9
sin_p3_2:
	.double	0r2.8232123673155168353E-1
sin_p3_3:
	.double	0r-1.3755593581121927649E-1
sin_p3_4:
	.double	0r-2.3526769749636338575E-2
sin_p3_5:
	.double	0r6.8777964033410682668E-3
sin_p3_6:
	.double	0r7.8422158064252829243E-4
sin_p3_7:
	.double	0r-1.6378316139497952112E-4
sin_p3_8:
	.double	0r-1.4102652890564176127E-5
sin_p3_9:
	.double	0r2.0754701007995074451E-6

sin_p4_c:
sin_p4_0h:
	.double	0r-5.6464247346312534948E-1
sin_p4_0l:
	.double	0r6.06241788103829245082E-24
sin_p4_1h:
	.double	0r8.2533560693264007568E-1
sin_p4_1l:
	.double	0r7.9304554034820284869E-9
sin_p4_2:
	.double	0r2.8232123673155273824E-1
sin_p4_3:
	.double	0r-1.3755593580986152924E-1
sin_p4_4:
	.double	0r-2.3526769748731638648E-2
sin_p4_5:
	.double	0r6.8777971733520841535E-3
sin_p4_6:
	.double	0r7.8422151328288352071E-4
sin_p4_7:
	.double	0r-1.6373002515216467253E-4
sin_p4_8:
	.double	0r-1.4106512050855138886E-5
sin_p4_9:
	.double	0r2.4764422854631738044E-6

cos_p_0:
	.double	0r4.1666666666666588026E-2
cos_p_1:
	.double	0r-1.3888888888872778175E-3
cos_p_2:
	.double	0r2.4801587288764459412E-5
cos_p_3:
	.double	0r-2.7557314167050702998E-7
cos_p_4:
	.double	0r2.0875701408714520036E-9
cos_p_5:
	.double	0r-1.1358718309736171193E-11

# .. .5854
#tan_p_0:
#	.double	0r-18086151.600729089230
#tan_p_1:
#	.double	0r1161461.5827075217385
#tan_p_2:
#	.double	0r-13169.960960193349820
#tan_q_0:
#	.double	0r-54258454.802187263966
#tan_q_1:
#	.double	0r25187766.668997306377
#tan_q_2:
#	.double	0r-1329914.3444088697433
#tan_q_3:
#	.double	0r13760.338151945812569

# .. .338
tan_p_0:
	.double	0r-18191117.789276178926
tan_p_1:
	.double	0r1167963.0645372841973
tan_p_2:
	.double	0r-13234.676172752202547
tan_q_0:
	.double	0r-54573353.367828540504
tan_q_1:
	.double	0r25333230.540743269026
tan_q_2:
	.double	0r-1337310.4614476819988
tan_q_3:
	.double	0r13827.503083158084337

# ..7854
#tan2_p_0:
#	.double	0r3.3283674370620949801E-2
#tan2_p_1:
#	.double	0r2.5663601402049946582E-2
#tan2_p_2:
#	.double	0r-3.1180502523212879186E-4
#tan2_p_3:
#	.double	0r4.9814468378033982921E-7
#tan2_q_0:
#	.double	0r-1.3338299229604572149E-1
#tan2_q_1:
#	.double	0r3.4248261922569253959E-3
#tan2_q_2:
#	.double	0r-1.7860673544716858919E-5

# ..3678
#tan2_p_0:
#	.double	0r3.3322645703933846673E-2
#tan2_p_1:
#	.double	0r2.5645883816593488536E-2
#tan2_p_2:
#	.double	0r-3.1101629629724883994E-4
#tan2_p_3:
#	.double	0r4.9436497805178155231E-7
#tan2_q_0:
#	.double	0r-1.3334402096273281768E-1
#tan2_q_1:
#	.double	0r3.4200990512379442383E-3
#tan2_q_2:
#	.double	0r-1.7781628650750523380E-5

# ..3908
tan2_p_0:
	.double	0r3.3321283446731200795E-2
tan2_p_1:
	.double	0r2.5646503068216856824E-2
tan2_p_2:
	.double	0r-3.1104383115385493899E-4
tan2_p_3:
	.double	0r4.9449499280323978810E-7
tan2_q_0:
	.double	0r-1.3334538321993547050E-1
tan2_q_1:
	.double	0r3.4202642171272572627E-3
tan2_q_2:
	.double	0r-1.7784380596478880932E-5

# .. .2
tan3_p_0:
	.double	0r-18224747.034562580287
tan3_p_1:
	.double	0r1170032.8518652219791
tan3_p_2:
	.double	0r-13254.922404240271135
tan3_q_0:
	.double	0r-54674241.103687740862
tan3_q_1:
	.double	0r25379794.997070763260
tan3_q_2:
	.double	0r-1339662.7778249811381
tan3_q_3:
	.double	0r13848.512058865804647

tan_0_5_t:
	.double	0r1.25
	.double	0r0.5
real_0_5_m_1_25_atan_0_5_49_l:
	.double	0r-1.8102913770216112547E-16
real_0_5_m_1_25_atan_0_5_49:
	.double	0r-7.9559511251007464239E-2

tan_n_0_5_t:
	.double	0r1.25
	.double	0r-0.5
real_1_25_atan_0_5_m_0_5_49_l:
	.double	0r1.8102913770216112547E-16
real_1_25_atan_0_5_m_0_5_49:
	.double	0r7.9559511251007464239E-2

tan_s_0_5_t:
	.double	0r1.5
sqrt_0_5:
	.double	0r7.07106781186547572737E-1
sqrtn_0_5_m_1_5_atann_sqrt_0_5_l:
	.double	0r-3.4791817252377832918E-18
sqrtn_0_5_m_1_5_atann_sqrt_0_5:
	.double	0r-2.1611278181903348372E-1

tan_n_s_0_5_t:
	.double	0r1.5
n_sqrt_0_5:
	.double	0r-7.07106781186547572737E-1
n_sqrtn_0_5_m_1_5_atann_sqrt_0_5_l:
	.double	0r3.4791817252377832918E-18
n_sqrtn_0_5_m_1_5_atann_sqrt_0_5:
	.double	0r2.1611278181903348372E-1

tan_s_2_t:
	.double	0r3.0
sqrt_2_0:
	.double	0r1.4142135623730951455
sqrt_2_m_3_atan_sqrt_2_l:
	.double	0r7.4004687159376949604E-17
sqrt_2_m_3_atan_sqrt_2:
	.double	0r-1.4517362920004328597

tan_n_s_2_t:
	.double	0r3.0
n_sqrt_2_0:
	.double	0r-1.4142135623730951455
n_sqrt_2_m_3_atan_sqrt_2_l:
	.double	0r-7.4004687159376949604E-17
n_sqrt_2_m_3_atan_sqrt_2:
	.double	0r1.4517362920004328597

# .. 0.55
#asin_p_0:
#	.double	0r-25.316696852169688014
#asin_p_1:
#	.double	0r53.530200010422156254
#asin_p_2:
#	.double	0r-37.683203270692622766
#asin_p_3:
#	.double	0r9.8280386103977175338
#asin_p_4:
#	.double	0r-0.6933246588625101570
#asin_q_0:
#	.double	0r-151.90018111301861836
#asin_q_1:
#	.double	0r389.53628156345331490
#asin_q_2:
#	.double	0r-360.70299781814912876
#asin_q_3:
#	.double	0r144.63464250990605819
#asin_q_4:
#	.double	0r-23.247871426450686272

asin_p_0:
	.double	0r-31.133659782158286333
asin_p_1:
	.double	0r63.858157457633225818
asin_p_2:
	.double	0r-43.244454939408448979
asin_p_3:
	.double	0r10.711904434851501122
asin_p_4:
	.double	0r-0.7023102565817557208
asin_q_0:
	.double	0r-186.80195869294971089
asin_q_1:
	.double	0r467.20982615762636669
asin_q_2:
	.double	0r-419.67491247177241576
asin_q_3:
	.double	0r162.03208845920067915
asin_q_4:
	.double	0r-24.808857438965841169

asin_c:

asin2_p_0:
	.double	0r31.367022265271895520
asin2_p_1:
	.double	0r-27.553457288163915706
asin2_p_2:
	.double	0r7.3142287109234631615
asin2_p_3:
	.double	0r-0.5695539268055010984
asin2_p_4:
	.double	0r2.7732700457810590539E-3
asin2_q_0:
	.double	0r376.40426718326244782
asin2_q_1:
	.double	0r-415.33244757417799065
asin2_q_2:
	.double	0r156.01490234281396852
asin2_q_3:
	.double	0r-22.702479601946876642

// 0.55 ..
#asin2_p_0:
#	.double	0r29.355358314463529723
#asin2_p_1:
#	.double	0r-26.147018538045006864
#asin2_p_2:
#	.double	0r7.0703500716163327766
#asin2_p_3:
#	.double	0r-0.5652641176899680930
#asin2_p_4:
#	.double	0r2.9079909341710704143E-3
#asin2_q_0:
#	.double	0r352.26429977355559231
#asin2_q_1:
#	.double	0r-393.02368990519767067
#asin2_q_2:
#	.double	0r149.68540386246363028
#asin2_q_3:
#	.double	0r-22.170690309691252651

asin_p1_c:
asin_p1_0h:
	.double	0r5.7043710961221538724E-1
asin_p1_0l:
	.double	0r4.9248428721475757358E-23
asin_p1_1h:
	.double	0r1.1881211400032043457
asin_p1_1l:
	.double	0r1.4630145983574038837E-9
asin_p1_2:
	.double	0r4.5284120326143617596E-1
asin_p1_3:
	.double	0r6.2472394124586794195E-1
asin_p1_4:
	.double	0r8.0835086833083236169E-1
asin_p1_5:
	.double	0r1.2595104015172415846
asin_p1_6:
	.double	0r2.0488537552293428767
asin_p1_7:
	.double	0r3.5089140995443472981
asin_p1_8:
	.double	0r6.2851334414813333495
asin_p1_9:
	.double	0r10.128040933414240499
asin_p1_10:
	.double	0r33.046781180882994988
asin_p1_11:
	.double	0r-52.817309641779630169
asin_p1_12:
	.double	0r540.99494117159986217
asin_p1_13:
	.double	0r-1326.1434641099594955
asin_p1_14:
	.double	0r2612.6799241572512074

asin_p2_c:
asin_p2_0h:
	.double	0r5.7043710961221538724E-1
asin_p2_0l:
	.double	0r4.9248428721475757358E-23
asin_p2_1h:
	.double	0r1.1881211400032043457
asin_p2_1l:
	.double	0r1.4630165967588482090E-9
asin_p2_2:
	.double	0r4.5284120325997734291E-1
asin_p2_3:
	.double	0r6.2472394155362398482E-1
asin_p2_4:
	.double	0r8.0835082941011759949E-1
asin_p2_5:
	.double	0r1.2595128937378745615
asin_p2_6:
	.double	0r2.0487338667125807312
asin_p2_7:
	.double	0r3.5123184925937764866
asin_p2_8:
	.double	0r6.2076105483454178113
asin_p2_9:
	.double	0r11.227381892153145415
asin_p2_10:
	.double	0r20.429661082626292767
asin_p2_11:
	.double	0r35.926476241524127886
asin_p2_12:
	.double	0r55.782391042293575367
asin_p2_13:
	.double	0r64.653236450484357078
asin_p2_14:
	.double	0r39.681910714502151905

asin_p3_c:
asin_p3_0h:
	.double	0r-5.7043710961221538724E-1
asin_p3_0l:
	.double	0r-4.9248428721475757358E-23
asin_p3_1h:
	.double	0r1.1881211400032043457
asin_p3_1l:
	.double	0r1.4630145983574038837E-9
asin_p3_2:
	.double	0r-4.5284120326143617596E-1
asin_p3_3:
	.double	0r6.2472394124586794195E-1
asin_p3_4:
	.double	0r-8.0835086833083236169E-1
asin_p3_5:
	.double	0r1.2595104015172415846
asin_p3_6:
	.double	0r-2.0488537552293428767
asin_p3_7:
	.double	0r3.5089140995443472981
asin_p3_8:
	.double	0r-6.2851334414813333495
asin_p3_9:
	.double	0r10.128040933414240499
asin_p3_10:
	.double	0r-33.046781180882994988
asin_p3_11:
	.double	0r-52.817309641779630169
asin_p3_12:
	.double	0r-540.99494117159986217
asin_p3_13:
	.double	0r-1326.1434641099594955
asin_p3_14:
	.double	0r-2612.6799241572512074

asin_p4_c:
asin_p4_0h:
	.double	0r-5.7043710961221538724E-1
asin_p4_0l:
	.double	0r-4.9248428721475757358E-23
asin_p4_1h:
	.double	0r1.1881211400032043457
asin_p4_1l:
	.double	0r1.4630165967588482090E-9
asin_p4_2:
	.double	0r-4.5284120325997734291E-1
asin_p4_3:
	.double	0r6.2472394155362398482E-1
asin_p4_4:
	.double	0r-8.0835082941011759949E-1
asin_p4_5:
	.double	0r1.2595128937378745615
asin_p4_6:
	.double	0r-2.0487338667125807312
asin_p4_7:
	.double	0r3.5123184925937764866
asin_p4_8:
	.double	0r-6.2076105483454178113
asin_p4_9:
	.double	0r11.227381892153145415
asin_p4_10:
	.double	0r-20.429661082626292767
asin_p4_11:
	.double	0r35.926476241524127886
asin_p4_12:
	.double	0r-55.782391042293575367
asin_p4_13:
	.double	0r64.653236450484357078
asin_p4_14:
	.double	0r-39.681910714502151905

acos_p_0:
	.double	0r-23.490891740111308650
acos_p_1:
	.double	0r50.216364730997767651
acos_p_2:
	.double	0r-35.846130541173899076
acos_p_3:
	.double	0r9.5237685361261430472
acos_p_4:
	.double	0r-0.68995264971619463257
acos_q_0:
	.double	0r-140.94535044067245622
acos_q_1:
	.double	0r364.72359608470605963
acos_q_2:
	.double	0r-341.44918263146718118
acos_q_3:
	.double	0r138.79408611688072028
acos_q_4:
	.double	0r-22.704016182082593645

acos2_p_0:
	.double	0r30.187145498002834643
acos2_p_1:
	.double	0r-26.731562531992352660
acos2_p_2:
	.double	0r7.1724615825161839311
acos2_p_3:
	.double	0r-0.56708755287485912433
acos2_p_4:
	.double	0r2.8497262016782816223E-3
acos2_q_0:
	.double	0r362.24574597603304937
acos2_q_1:
	.double	0r-402.28404322843209684
acos2_q_2:
	.double	0r152.32592108178161538
acos2_q_3:
	.double	0r-22.394016829865698526

acos_p1_c:
acos_p1_0h:
	.double	0r8.6321189001609244240E-1
acos_p1_0l:
	.double	0r-2.7467628254551864260E-23
acos_p1_1h:
	.double	0r-1.3159033656120300293
acos_p1_1l:
	.double	0r-2.4367664774871400368E-8
acos_p1_2:
	.double	0r-7.4055169144604560127E-1
acos_p1_3:
	.double	0r-1.2132914821382745352
acos_p1_4:
	.double	0r-2.1344587603015683364
acos_p1_5:
	.double	0r-4.3088049195660635959
acos_p1_6:
	.double	0r-9.2462207583022237856
acos_p1_7:
	.double	0r-20.778559358953092584
acos_p1_8:
	.double	0r-48.776431616826357640
acos_p1_9:
	.double	0r-105.97079800530472937
acos_p1_10:
	.double	0r-413.00216737064670269
acos_p1_11:
	.double	0r662.354234414432198719
acos_p1_12:
	.double	0r-11016.701631003812508
acos_p1_13:
	.double	0r35318.9338646810210776
acos_p1_14:
	.double	0r-97099.956120653485414

acos_p2_c:
acos_p2_0h:
	.double	0r8.6321189001609244240E-1
acos_p2_0l:
	.double	0r-2.7467628254551864260E-23
acos_p2_1h:
	.double	0r-1.3159033656120300293
acos_p2_1l:
	.double	0r-2.4367664108737585593E-8
acos_p2_2:
	.double	0r-7.4055169144296173478E-1
acos_p2_3:
	.double	0r-1.2132914822347449224
acos_p2_4:
	.double	0r-2.1344586500282272112
acos_p2_5:
	.double	0r-4.3088086958273930094
acos_p2_6:
	.double	0r-9.2457168210006930309
acos_p2_7:
	.double	0r-20.790839559740305731
acos_p2_8:
	.double	0r-48.251128736941033992
acos_p2_9:
	.double	0r-114.02209884122218853
acos_p2_10:
	.double	0r-267.05630398433208939
acos_p2_11:
	.double	0r-584.65850073182002689
acos_p2_12:
	.double	0r-1076.6291620946751664
acos_p2_13:
	.double	0r-1407.9468675552657260
acos_p2_14:
	.double	0r-936.98633843723951031

atan4_p_c:
atan4_p_0:
	.double	0r-51.285593469956815227
atan4_p_1:
	.double	0r-100.64117630107490697
atan4_p_2:
	.double	0r-64.297908354955467303
atan4_p_3:
	.double	0r-14.727705326536764119
atan4_p_4:
	.double	0r-0.8688437904180191795
atan4_q_0:
	.double	0r153.85678040987045279
atan4_q_1:
	.double	0r394.23759714914689312
atan4_q_2:
	.double	0r363.49766317870364674
atan4_q_3:
	.double	0r144.60833714965690433
atan4_q_4:
	.double	0r23.038413151078877661

n_45_d_256:
	.double	0r0.175781250000
n_m_45_d_256:
	.double	0r-0.175781250000

atan_p_9_0:
	.double	0r-3.3333333333333309279E-1
atan_p_9_1:
	.double	0r1.9999999999984593990E-1
atan_p_9_2:
	.double	0r-1.4285714282482467330E-1
atan_p_9_3:
	.double	0r1.1111110782523182794E-1
atan_p_9_4:
	.double	0r-9.0908902574698829957E-2
atan_p_9_5:
	.double	0r7.6916554867419328900E-2
atan_p_9_6:
	.double	0r-6.6526935532345926605E-2
atan_p_9_7:
	.double	0r5.6999867343679795628E-2
atan_p_9_8:
	.double	0r-3.9093313704495452621E-2

atan_0_5_52:
	.double	0r4.6364760900080603800E-1
atan_0_5_52_l:
	.double	0r7.8209928684219507951E-17
atan_0_5_real_0_5:
	.double	0r0.5

n_atan_0_5_52:
	.double	0r-4.6364760900080603800E-1
n_atan_0_5_52_l:
	.double	0r-7.8209928684219507951E-17
n_atan_0_5_real_0_5:
	.double	0r-0.5

atan_n_0_5_8_c:
atan_n_0_5_8_0:
	.double	0r-3.3333333333333192705E-1
atan_n_0_5_8_1:
	.double	0r1.9999999999920992089E-1
atan_n_0_5_8_2:
	.double	0r-1.4285714269165267210E-1
atan_n_0_5_8_3:
	.double	0r1.1111109349119581424E-1
atan_n_0_5_8_4:
	.double	0r-9.0908019792184269203E-2
atan_n_0_5_8_5:
	.double	0r7.6884259191928067123E-2
atan_n_0_5_8_6:
	.double	0r-6.5833773159939656949E-2
atan_n_0_5_8_7:
	.double	0r4.8945313616423499758E-2

atan_1_53:
	.double	0r7.8539816339744827900E-1
atan_1_53_l:
	.double	0r3.0616169978683830179E-17

n_atan_1_53:
	.double	0r-7.8539816339744827900E-1
n_atan_1_53_l:
	.double	0r-3.0616169978683830179E-17

atan_n_8_c:
atan_n_8_0:
	.double	0r-3.3333333333333325932E-1
atan_n_8_1:
	.double	0r1.9999999999993750555E-1
atan_n_8_2:
	.double	0r-1.4285714283792697032E-1
atan_n_8_3:
	.double	0r1.1111110814149251225E-1
atan_n_8_4:
	.double	0r-9.0908830368634924168E-2
atan_n_8_5:
	.double	0r7.6909493951295496150E-2
atan_n_8_6:
	.double	0r-6.6248652556378059830E-2
atan_n_8_7:
	.double	0r5.1752788427847688790E-2
atan_n_8_real_40_bits:
	.quad	0x0ffffffffffffe000
atan_n_8_real_abs_40_bits:
	.quad	0x07fffffffffffe000
atan_n_8_real_2_p_m_12:
	.double	0r2.44140625E-4

atan_p_8_c:
atan_p_8_0:
	.double	0r-3.3333333333333331483E-1
atan_p_8_1:
	.double	0r1.9999999999997875033E-1
atan_p_8_2:
	.double	0r-1.4285714284904510452E-1
atan_p_8_3:
	.double	0r1.1111110961868993219E-1
atan_p_8_4:
	.double	0r-9.0908937814301260527E-2
atan_p_8_5:
	.double	0r7.6913854250452912131E-2
atan_p_8_6:
	.double	0r-6.6341308897488418528E-2
atan_p_8_7:
	.double	0r5.2556144706942850564E-2
atan_p_8_real_39_bits:
	.quad	0x0ffffffffffffc000
atan_p_8_abs_real_39_bits:
	.quad	0x07fffffffffffc000
atan_p_8_real_2_p_m_12:
	.double	0r2.44140625E-4

atan_2_0:
	.double	0r1.1071487177940904090
atan_2_0_l:
	.double	0r9.4044713735663794124E-17
atan_2_0_real_2_0:
	.double	0r2.0

n_atan_2_0:
	.double	0r-1.1071487177940904090
n_atan_2_0_l:
	.double	0r-9.4044713735663794124E-17
n_atan_2_0_real_2_0:
	.double	0r-2.0

atan_n_2_8_c:
atan_n_2_8_0:
	.double	0r-3.3333333333333042825E-1
atan_n_2_8_1:
	.double	0r1.9999999999849707444E-1
atan_n_2_8_2:
	.double	0r-1.4285714256949089140E-1
atan_n_2_8_3:
	.double	0r1.1111108323968375833E-1
atan_n_2_8_4:
	.double	0r-9.0907550811429177484E-2
atan_n_2_8_5:
	.double	0r7.6872320463257509671E-2
atan_n_2_8_6:
	.double	0r-6.5674898157514843833E-2
atan_n_2_8_7:
	.double	0r4.8083662211730243685E-2

real_atan_large:
	.double	0r5805358775541310.0840
real_atan_m_large:
	.double	0r-5805358775541310.0840

exp_p0_c:
exp_p0_2:
	.double	0r4.9999999999999900080E-1
exp_p0_3:
	.double	0r1.6666666666678625619E-1
exp_p0_4:
	.double	0r4.1666666661027668139E-2
exp_p0_5:
	.double	0r8.3333334724719175524E-3
exp_p0_6:
	.double	0r1.3888868951434380893E-3
exp_p0_7:
	.double	0r1.9842988288729944998E-4
exp_p0_8:
	.double	0r2.4713876429938641863E-5
exp_p0_9:
	.double	0r2.9988651596576767477E-6

exp_p1_c:
exp_p1_0:
	.double	0r1.1921772413532716328
exp_p1_0_l:
	.double	0r-5.3111925243256501606E-17
exp_p1_1_h:
	.double	0r1.1921772360801696777
exp_p1_1_l:
	.double	0r5.2731019550833480025E-9
exp_p1_2:
	.double	0r5.9608862067662515827E-1
exp_p1_3:
	.double	0r1.9869620689294639759E-1
exp_p1_4:
	.double	0r4.9674051698174313818E-2
exp_p1_5:
	.double	0r9.9348108199627475218E-3
exp_p1_6:
	.double	0r1.6557962681130399766E-3
exp_p1_7:
	.double	0r2.3658136938083061391E-4
exp_p1_8:
	.double	0r2.9408132193586159414E-5
exp_p1_9:
	.double	0r3.6463907908503166658E-6

exp_m0_c:
exp_m0_2:
	.double	0r4.9999999999999916733E-1
exp_m0_3:
	.double	0r1.6666666666656548834E-1
exp_m0_4:
	.double	0r4.1666666661841822439E-2
exp_m0_5:
	.double	0r8.3333332132295139666E-3
exp_m0_6:
	.double	0r1.3888871537291139647E-3
exp_m0_7:
	.double	0r1.9839759941175428605E-4
exp_m0_8:
	.double	0r2.4723414228338120148E-5
exp_m0_9:
	.double	0r2.5328445339119633100E-6

exp_m1_c:
exp_m1_0:
	.double	0r8.3880145108698256351E-1
exp_m1_0_l:
	.double	0r-3.1258096785010882408E-17
exp_m1_1_h:
	.double	0r8.3880144357681274414E-1
exp_m1_1_l:
	.double	0r7.5101698193691390770E-9
exp_m1_2:
	.double	0r4.1940072554349638878E-1
exp_m1_3:
	.double	0r1.3980024184811054577E-1
exp_m1_4:
	.double	0r3.4950060469065312441E-2
exp_m1_5:
	.double	0r6.9900121811488523035E-3
exp_m1_6:
	.double	0r1.1650024396098284090E-3
exp_m1_7:
	.double	0r1.6642701498218752582E-4
exp_m1_8:
	.double	0r2.0771521593253968396E-5
exp_m1_9:
	.double	0r2.1676257763527338661E-6

# ln < 1

#ln_s_c:
#ln_s_p_0:
#	.double	0r9.1503481690678860616
#ln_s_p_1:
#	.double	0r20.941485866336655874
#ln_s_p_2:
#	.double	0r16.487417954606193859
#ln_s_p_3:
#	.double	0r5.1186080224958212526
#ln_s_p_4:
#	.double	0r4.9845734945458103349E-1
#ln_s_q_0:
#	.double	0r27.451044507203782530
#ln_s_q_1:
#	.double	0r83.412740979424398802
#ln_s_q_2:
#	.double	0r95.551182894484938402
#ln_s_q_3:
#	.double	0r50.697088912299392405
#ln_s_q_4:
#	.double	0r12.129116214794825268

# ln .83 .. 1

#ln_s_c:
#ln_s_p_0:
#	.double	0r10.602228952834687803
#ln_s_p_1:
#	.double	0r23.654147261303222649
#ln_s_p_2:
#	.double	0r18.048399385285609497
#ln_s_p_3:
#	.double	0r5.3866317747411187611
#ln_s_p_4:
#	.double	0r4.9866367203621170257E-1
#ln_s_q_0:
#	.double	0r31.806686858504065185
#ln_s_q_1:
#	.double	0r94.817456927787816312
#ln_s_q_2:
#	.double	0r106.17427873659880788
#ln_s_q_3:
#	.double	0r54.803473649357279385
#ln_s_q_4:
#	.double	0r12.671320252177885379

# ln .8243 .. 1

ln_s_c:
ln_s_p_0:
	.double	0r10.533214407052481576
ln_s_p_1:
	.double	0r23.526643885226203423
ln_s_p_2:
	.double	0r17.976077060886193948
ln_s_p_3:
	.double	0r5.3744490269565492468
ln_s_p_4:
	.double	0r4.9865516811442134326E-1
ln_s_q_0:
	.double	0r31.599643221157446504
ln_s_q_1:
	.double	0r94.279664071546818604
ln_s_q_2:
	.double	0r105.67819330362900132
ln_s_q_3:
	.double	0r54.614015226380423940
ln_s_q_4:
	.double	0r12.646688742839442554

# ln >= 1

#ln_b_c:
#ln_b_p_0:
#	.double	0r17.467871503051810578
#ln_b_p_1:
#	.double	0r35.785852544901331385
#ln_b_p_2:
#	.double	0r24.552006690337957906
#ln_b_p_3:
#	.double	0r6.4047236758045062999
#ln_b_p_4:
#	.double	0r4.9917096570160635061E-1
#ln_b_q_0:
#	.double	0r52.403614509155588053
#ln_b_q_1:
#	.double	0r146.66026851655587393
#ln_b_q_2:
#	.double	0r152.20905275348258101
#ln_b_q_3:
#	.double	0r71.576606726420877180
#ln_b_q_4:
#	.double	0r14.725978745938864023

# ln 1.0 .. 1.25

ln_b_c:
ln_b_p_0:
	.double	0r15.580409683056638315
ln_b_p_1:
	.double	0r32.543914666072645048
ln_b_p_2:
	.double	0r22.877901706403754645
ln_b_p_3:
	.double	0r6.1556714513765760088
ln_b_p_4:
	.double	0r4.9907618814155391140E-1
ln_b_q_0:
	.double	0r46.741229049169916721
ln_b_q_1:
	.double	0r132.68766578509504939
ln_b_q_2:
	.double	0r140.10471702854880505
ln_b_q_3:
	.double	0r67.303567178530471438
ln_b_q_4:
	.double	0r14.223951326720150945

# log10 < 1

#log10_s_c:
#log10_s_p_0:
#	.double	0r3.9766162055986344903
#log10_s_p_1:
#	.double	0r9.0998450829915000782
#log10_s_p_2:
#	.double	0r7.1633761863796170388
#log10_s_p_3:
#	.double	0r2.2235094671281157019
#log10_s_p_4:
#	.double	0r2.1647774010462134120E-1
#log10_s_q_0:
#	.double	0r27.469491586710010012
#log10_s_q_1:
#	.double	0r83.461621599998238707
#log10_s_q_2:
#	.double	0r95.597370915186246521
#log10_s_q_3:
#	.double	0r50.715260287037992271
#log10_s_q_4:
#	.double	0r12.131569554734877414

# log10 .83 .. 1

log10_s_c:
log10_s_p_0:
	.double	0r4.6028186381430433727
log10_s_p_1:
	.double	0r10.269763424759014825
log10_s_p_2:
	.double	0r7.8365495824134949743
log10_s_p_3:
	.double	0r2.3390837249823710486
log10_s_p_4:
	.double	0r2.1656666260147883207E-1
log10_s_q_0:
	.double	0r31.795144745829979627
log10_s_q_1:
	.double	0r94.787371070649314220
log10_s_q_2:
	.double	0r106.14640820241447727
log10_s_q_3:
	.double	0r54.792773831672434426
log10_s_q_4:
	.double	0r12.669919891359308295

# log10 >= 1

#log10_b_c:
#log10_b_p_0:
#	.double	0r7.5811637929542987635
#log10_b_p_1:
#	.double	0r15.533033113504695066
#log10_b_p_2:
#	.double	0r10.658434759740712749
#log10_b_p_3:
#	.double	0r2.7808975967872808788
#log10_b_p_4:
#	.double	0r2.1678697192356721768E-1
#log10_b_q_0:
#	.double	0r52.368824211608433927
#log10_b_q_1:
#	.double	0r146.57500964710882840
#log10_b_q_2:
#	.double	0r152.13582168617784873
#log10_b_q_3:
#	.double	0r71.551032626191883423
#log10_b_q_4:
#	.double	0r14.723015954370795910

# log10 1 .. 1.25

log10_b_c:
log10_b_p_0:
	.double	0r6.7674014091633534207
log10_b_p_1:
	.double	0r14.135207984866871911
log10_b_p_2:
	.double	0r9.9365500005391176330
log10_b_p_3:
	.double	0r2.6734926843772655047
log10_b_p_4:
	.double	0r2.1674607755999492076E-1
log10_b_q_0:
	.double	0r46.747552809139307328
log10_b_q_1:
	.double	0r132.70322218382881374
log10_b_q_2:
	.double	0r140.11814067349982338
log10_b_q_3:
	.double	0r67.308281802680511419
log10_b_q_4:
	.double	0r14.224501421540916013

log2_b_c:
log2_b_p_0:
	.double	0r5.7248655744376097942
log2_b_p_1:
	.double	0r9.7037982066316619267
log2_b_p_2:
	.double	0r4.9251104233553251177
log2_b_p_3:
	.double	0r0.71604182547154882066
log2_b_p_4:
	.double	0r0.00024384785289470863262
log2_b_q_0:
	.double	0r11.904523296020823153
log2_b_q_1:
	.double	0r29.106873574779058345
log2_b_q_2:
	.double	0r24.928920420570964467
log2_b_q_3:
	.double	0r8.6737948511229703286

log2_s_c:
log2_s_p_0:
	.double	0r3.6543174401668601092
log2_s_p_1:
	.double	0r6.9236821167562956347
log2_s_p_2:
	.double	0r4.0552858971538414679
log2_s_p_3:
	.double	0r0.71265600724817212974
log2_s_p_4:
	.double	0r0.00061552202164347354606
log2_s_q_0:
	.double	0r7.5989394915663739383
log2_s_q_1:
	.double	0r20.096596833512705871
log2_s_q_2:
	.double	0r18.945813884202145516
log2_s_q_3:
	.double	0r7.4327985038948378715

exp2_p0_25_c:
exp2_p0_25_0h:
	.double	0r1.1892071150027210269
exp2_p0_25_0l:
	.double	0r3.9820152314656461110E-17
exp2_p0_25_1h:
	.double	0r8.2429555058479309082E-1
exp2_p0_25_1l:
	.double	0r8.2811696389128996998E-9
exp2_p0_25_2:
	.double	0r2.8567907128801478533E-1
exp2_p0_25_3:
	.double	0r6.6005880936045882579E-2
exp2_p0_25_4:
	.double	0r1.1437947568180147420E-2
exp2_p0_25_5:
	.double	0r1.5856362256660922264E-3
exp2_p0_25_6:
	.double	0r1.8317976935970924383E-4
exp2_p0_25_7:
	.double	0r1.8139623479154579359E-5
exp2_p0_25_8:
	.double	0r1.5673360359583023396E-6
exp2_p0_25_9:
	.double	0r1.3055968895300254492E-7

exp2_p0_c:
exp2_p0_0h:
	.double	0r1.0
exp2_p0_0l:
	.double	0r0.0
exp2_p0_1h:
	.double	0r6.9314716756343841553E-1
exp2_p0_1l:
	.double	0r1.2996506870699420233E-8
exp2_p0_2:
	.double	0r2.4022650695910330310E-1
exp2_p0_3:
	.double	0r5.5504108664725972100E-2
exp2_p0_4:
	.double	0r9.6181291092419882865E-3
exp2_p0_5:
	.double	0r1.3333558019987959767E-3
exp2_p0_6:
	.double	0r1.5403532681856270284E-4
exp2_p0_7:
	.double	0r1.5253065510864060166E-5
exp2_p0_8:
	.double	0r1.3190300302967161470E-6
exp2_p0_9:
	.double	0r1.0881074348847176580E-7

exp2_m0_c:
exp2_m0_0h:
	.double	0r1.0
exp2_m0_0l:
	.double	0r0.0
exp2_m0_1h:
	.double	0r6.9314716756343841553E-1
exp2_m0_1l:
	.double	0r1.2996506870699420233E-8
exp2_m0_2:
	.double	0r2.4022650695909780749E-1
exp2_m0_3:
	.double	0r5.5504108664691832742E-2
exp2_m0_4:
	.double	0r9.6181291047027026725E-3
exp2_m0_5:
	.double	0r1.3333557764085299593E-3
exp2_m0_6:
	.double	0r1.5403499520940549562E-4
exp2_m0_7:
	.double	0r1.5251161994200753343E-5
exp2_m0_8:
	.double	0r1.3166061357593046239E-6
exp2_m0_9:
	.double	0r9.2942318847941285694E-8

exp2_m0_25_c:
exp2_m0_25_0h:
	.double	0r8.4089641525371450204E-1
exp2_m0_25_0l:
	.double	0r4.0995050102907482601E-17
exp2_m0_25_1h:
	.double	0r5.8286496996879577637E-1
exp2_m0_25_1l:
	.double	0r9.4072813983103742430E-9
exp2_m0_25_2:
	.double	0r2.0200560855082275169E-1
exp2_m0_25_3:
	.double	0r4.6673206007799013240E-2
exp2_m0_25_4:
	.double	0r8.0878502812528896282E-3
exp2_m0_25_5:
	.double	0r1.1212140390502213245E-3
exp2_m0_25_6:
	.double	0r1.2952709156943405071E-4
exp2_m0_25_7:
	.double	0r1.2823060087120729985E-5
exp2_m0_25_8:
	.double	0r1.1036110895925728151E-6
exp2_m0_25_9:
	.double	0r7.4921899653437894396E-8

real_m_1022:
	.double	0r-1022.0
real_1023:
	.double	0r1023.0
real_1024:
	.double	0r1024.0
real_1025:
	.double	0r1025.0
real_m_1076:
	.double	0r-1076.0
real_2_p_m_1022:
	.quad	0x00010000000000000
real_2_p_m_55:
	.quad	0x03C80000000000000
real_2_p_53:
	.quad	0x04340000000000000
real_m_2_p_53:
	.quad	0x0C340000000000000
real_2_p_55:
	.quad	0x04360000000000000
real_2_p_1023:
	.quad	0x07fe0000000000000
real_max:
	.quad	0x07fefffffffffffff
real_m_max:
	.quad	0x0ffefffffffffffff

real_4000_0:
	.double	0r4000.0
real_m_3810_0:
	.double	0r-3810.0
real_1401_0:
	.double	0r1401.0
real_m_1471_0:
	.double	0r-1471.0
real_4605_0:
	.double	0r4605.0
real_m_4834_0:
	.double	0r-4834.0
real_1_052:
	.double	0r1.052
real_m_1_052:
	.double	0r-1.052
real_power_exp_too_large:
	.double	0r6711563375777760768.0
real_power_exp_too_small:
	.double	0r-6393154322601327104.0