softirqs aren't directly related to hardware interrupts, they're the successor to "bottom halves" and the predecessor of tasklets. The (old) Unreliable Guide to Hacking the Linux Kernel has a brief section on the topic; I dare say there are better resources elsewhere. The list of softirqs is defined in `include/linux/interrupt.h`; you'll see they don't correspond to single hardware interrupts.
Thus you shouldn't subtract `/proc/softirq` counts from `/proc/interrupts`. The latter only counts hardware interrupts; these of course may result in softirqs being used too, but there's no easy way of determining the correlation ( _e.g._ between hardware interrupts on your network adapter and `NET_RX` or `NET_TX` softirqs).